JSqlParser基本应用文档-select部分

本文档介绍了JSqlParser在Java中如何使用,特别是关于`select`部分的解析和构造。通过示例展示了如何创建普通查询、子查询和连接查询。JSqlParser提供了解析SQL语句的组件,并能够构造复杂的查询表达式,包括表别名、查询字段、条件、分组和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSqlParser基本应用文档

该文档旨在快速了解JSqlParser的基本结构设计和JSqlParser中的select部分的应用(alter、delete、insert等其他部分视具体情况而定)。主要从普通查询(select)、子查询(subselect)、连接查询(union select)三个方面来了解JSqlParser的直接调用和SelectObject(已封装)的调用两个方面来简单构造。在构建sql之前先了解下JSqlParser的基本构造。

JSqlParser组成部分:

 

selectBody结构:

 

基本应用

基础数据:

直销客户业务量汇总:KB_ZX_CUST_PROD_SUM

字段

名称

month

统计月份

VIP_TYPE

客户类型

ZX_CUST_CODE

直销客户编码

ZX_CUST_NAME

直销客户名称

CUST_SUBST_NAME

客户局向

SUM_TOTAL

全部总用户数

 

生成表别名:

selectObject.generateTableAlias(key, tableName, aliasName);

等价于

selectObject.generateTableAlias(key, tableName, aliasName,false);

获取表别名:

selectObject.getTableAlias(key);

获取表:

selectObject.getTableByKey(key);

构造查询语句:

普通查询

条件设置

统计月份

12

客户类型

高值商客

直销客户编码

12

输出字段

统计月份

不使用函数

全部总用户数

不使用函数

目的SQL:

SELECT T_A.month, T_A.SUM_TOTAL  FROM KB_ZX_CUST_PROD_SUM T_A WHERE T_A.MONTH = '201512' AND  ( T_A.month = '12')  AND  ( T_A.VIP_TYPE = '高值商客')  AND  ( T_A.ZX_CUST_CODE = '12')

Demo:

package com.chinatmg.ecpp.helper;

 

import java.util.ArrayList;

import java.util.List;

 

import net.sf.jsqlparser.JSQLParserException;

import net.sf.jsqlparser.expression.Alias;

import net.sf.jsqlparser.expression.BinaryExpression;

import net.sf.jsqlparser.expression.CastExpression;

import net.sf.jsqlparser.expression.Expression;

import net.sf.jsqlparser.expression.Function;

import net.sf.jsqlparser.expression.LongValue;

import net.sf.jsqlparser.expression.Parenthesis;

import net.sf.jsqlparser.expression.StringValue;

import net.sf.jsqlparser.expression.operators.conditional.AndExpression;

import net.sf.jsqlparser.expression.operators.relational.EqualsTo;

import net.sf.jsqlparser.expression.operators.relational.ExpressionList;

import net.sf.jsqlparser.schema.Column;

import net.sf.jsqlparser.schema.Table;

import net.sf.jsqlparser.statement.create.table.ColDataType;

import net.sf.jsqlparser.statement.select.AllColumns;

import net.sf.jsqlparser.statement.select.Limit;

import net.sf.jsqlparser.statement.select.PlainSelect;

import net.sf.jsqlparser.statement.select.SelectExpressionItem;

 

import org.apache.commons.lang.StringUtils;

 

public class SimpleSelectDemo {

 

public static void main(String[] args){

SimpleSelectDemo demo = new SimpleSelectDemo();

String table= "KB_ZX_CUST_PROD_SUM";

String[][] condition ={ {"MONTH","12"},{"VIP_TYPE","高值商客"},{"ZX_CUST_CODE","12"}};

String[][] outColumn = { {"MONTH"},{"SUM_TOTAL"}};

String limit = "122";

demo.selectObjectDemo(table, null,condition, outColumn,null,limit);

demo.jsqlDemo(table, null,condition, outColumn,null,limit);

}

 

//SelectObject使用

SelectObject selectObjectDemo(String table,String aliasName,String[][] condition,String[][] outColumn,String[][] groubyColumn,String limit){

if(aliasName==null){

aliasName="T_A";

}

SelectObject selectObject = new SelectObject();

//生成表别名,默认userAs为true

selectObject.generateTableAlias(table, table, aliasName);

//设置查询的主体

selectObject.setFromItem(selectObject.getTableByKey(table));

//加入查询字段

if(outColumn!=null){

for(String[] out:outColumn){

switch (out.length){

case 1:

selectObject.addSelectItem(aliasName+"."+out[0]);

break;

case 2:

selectObject.addSelectItem(out[1]+"("+aliasName+"."+out[0]+")");

break;

case 4:

selectObject.addSelectItem(out[1]+"("+out[2]+"("+aliasName+"."+out[0]+" as "+out[3]+"))");

break;

}

}

}else{

selectObject.addSelectItem("(*)");

}

//加入查询条件

if(condition!=null){

for(String[] cond:condition){

try {

selectObject.addWhereExpression("("+aliasName+"."+cond[0]+"='"+cond[1]+"')");

} catch (JSQLParserException e) {

e.printStackTrace();

}

}

}

//添加group by

if(groubyColumn!=null){

for(String[] group:groubyColumn){

selectObject.addGroupByExpression(aliasName+"."+group[0]);

}

}

//设置Limit

if(StringUtils.isNotEmpty(limit)){

selectObject.setLimit(limit);

}

System.out.println("selectObject:"+selectObject);

return selectObject;

}

 

//JSqlParser直接调用

PlainSelect jsqlDemo(String ta,String aliasName,String[][] condition,String[][] outColumn,String[][] groubyColumn,String rowCount){

if(aliasName==null){

aliasName="T_A";

}

PlainSelect plainSelect = new PlainSelect();

 

Table table = new Table(ta);

Alias alias = new Alias(aliasName);

table.setAlias(alias);

//设置查询的主体

plainSelect.setFromItem(table);

//加入查询字段

if(outColumn!=null){

SelectExpressionItem selectItem = null;

Expression selectExpression = null;

Function func = null;

List<Expression> funcExpression = null;

CastExpression castExpression = null;

ColDataType colDataType = null;

for(String[] out:outColumn){

selectExpression = null;

selectItem = new SelectExpressionItem();

switch (out.length){

case 1:

selectExpression = new Column(aliasName+"."+out[0]);

break;

case 2:

func = new Function();

func.setName(out[1]);

funcExpression = new ArrayList<Expression>();

funcExpression.add(new Column(aliasName+"."+out[0]));

func.setParameters(new ExpressionList(funcExpression));

selectExpression = func;

break;

case 4:

//此处以cast 为例

func = new Function();

func.setName(out[1]);

funcExpression = new ArrayList<Expression>();

castExpression = new CastExpression();

castExpression.setLeftExpression(new Column(aliasName+"."+out[0]));

colDataType = new ColDataType();

colDataType.setDataType(out[3]);

castExpression.setType(colDataType);

castExpression.setUseCastKeyword(true);

funcExpression.add(castExpression);

func.setParameters(new ExpressionList(funcExpression));

selectExpression = func;

break;

}

selectItem.setExpression(selectExpression);

plainSelect.addSelectItems(selectItem);

}

}else{

plainSelect.addSelectItems(new AllColumns());

}

//加入查询条件

if(condition!=null){

BinaryExpression whereExpression =null;

for(String[] cond:condition){

whereExpression = new EqualsTo();

whereExpression.setLeftExpression(new Column(aliasName+"."+cond[0]));

whereExpression.setRightExpression(new StringValue(cond[1]));

if(plainSelect.getWhere()==null){

plainSelect.setWhere(new Parenthesis(whereExpression));

}else{

plainSelect.setWhere(new AndExpression(plainSelect.getWhere(),new Parenthesis(whereExpression)));

}

}

}

//添加group by

if(groubyColumn!=null){

for(String[] group:groubyColumn){

plainSelect.addGroupByColumnReference(new Column(aliasName+"."+group[0]));

}

}

//设置Limit

if(StringUtils.isNotEmpty(rowCount)){

Limit limit = new Limit();

limit.setRowCount(new LongValue(rowCount));

plainSelect.setLimit(limit);

}

System.out.println("JSqlDemo:"+plainSelect);

return plainSelect;

}

}

 

 

 

子查询:基于普通查询

条件设置

统计月份

12

客户类型

高值商客

直销客户编码

12

分组维度

直销客户名称

 

客户局向

 

输出字段

统计月份

统计

全部总用户数

求和

目的SQL:

select COUNT(a.month), SUM(CAST(a.SUM_TOTAL as double)), a.ZX_CUST_NAME, a.CUST_SUBST_NAME from (SELECT T_A.month, T_A.SUM_TOTAL, T_A.ZX_CUST_NAME, T_A.CUST_SUBST_NAME FROM KB_ZX_CUST_PROD_SUM T_A WHERE  ( T_A.month = '12') AND ( T_A.VIP_TYPE = '高值商客') AND ( T_A.ZX_CUST_CODE = '12') AND ( ( T_A.ZX_CUST_CODE = '3232') AND ( T_A.CUST_SUBST_NAME = '23') ) ) a group by a.ZX_CUST_NAME, a.CUST_SUBST_NAME limit 122

Demo:

package com.chinatmg.ecpp.helper;

 

import net.sf.jsqlparser.expression.Alias;

import net.sf.jsqlparser.statement.select.PlainSelect;

import net.sf.jsqlparser.statement.select.SubSelect;

 

public class SimpleSubselectDemo {

public static void main(String[] args){

String table= "KB_ZX_CUST_PROD_SUM";

String[][] condition ={ {"MONTH","12"},{"VIP_TYPE","高值商客"},{"ZX_CUST_CODE","12"}};

String[][] outColumn = { {"MONTH","COUNT"},{"SUM_TOTAL","SUM","CAST","double"},{"ZX_CUST_NAME"},{"CUST_SUBST_NAME"}};

String[][] groubyColumn = { {"MONTH"},{"SUM_TOTAL"}};

//子查询输出的字段

String[][] suboutColumn = { {"MONTH"},{"SUM_TOTAL"},{"ZX_CUST_NAME"},{"CUST_SUBST_NAME"}};

String limit = "122";

SimpleSubselectDemo demo= new SimpleSubselectDemo();

demo.suselectObjectDemo(table, condition, outColumn, groubyColumn, suboutColumn,limit);

demo.jsqlDemo(table, condition, outColumn, groubyColumn, suboutColumn,limit);

}

 

//SelectObject使用

SelectObject suselectObjectDemo(String table,String[][] condition,String[][] outColumn,String[][] groubyColumn,String[][] suboutColumn,String limit){

SimpleSelectDemo demo = new SimpleSelectDemo();

SelectObject selectObject = demo.selectObjectDemo("a", "a", null, outColumn, groubyColumn, limit);

SelectObject subselectObject = demo.selectObjectDemo(table,null, condition, suboutColumn,null,null);

selectObject.setSubselectObject(subselectObject, "a", false);;

System.out.println("subselect:"+selectObject);

return selectObject;

}

 

////JSqlParser直接调用

PlainSelect jsqlDemo(String ta,String[][] condition,String[][] outColumn,String[][] groubyColumn,String[][] s

注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: 中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值