jsqlparser使用記錄---生成sql語句
jsqlparser可以從0開始構建sql語句,也可以在原有sql語句的基礎上修改,非常好用
,jar包在上篇文章jsqlparser使用記錄—解析sql語句
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Alias;
import net.sf.jsqlparser.expression.Function;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.select.*;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.util.SelectUtils;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main1 {
public static void main(String[] args) {
createSelect();
changeSelect();
createInsert();
createUpdate();
createDelete();
}
public static void createSelect() {
System.out.println("==================================================建立查詢====================================================");
PlainSelect plainSelect = new PlainSelect();
//建立查詢的表
Table table = new Table("table");
table.setAlias(new Alias("t"));
plainSelect.setFromItem(table);
//建立查詢的列
List<String> selectColumnsStr = Arrays.asList("f1", "f2");
List<SelectItem> expressionItemList = selectColumnsStr.stream().map(item -> {
SelectExpressionItem selectExpressionItem = new SelectExpressionItem();
selectExpressionItem.setExpression(new Column(table, item));
return (SelectItem) selectExpressionItem;
}).collect(Collectors.toList());
SelectExpressionItem selectExpressionItem = new SelectExpressionItem();
selectExpressionItem.setAlias(new Alias("count"));
Function function = new Function();
function.setName("count");
ExpressionList expressionList = new ExpressionList();
expressionList.setExpressions(Arrays.asList(new Column(table, "f1")));
function.setParameters(expressionList);
selectExpressionItem.setExpression(function);
expressionItemList.add(selectExpressionItem);
plainSelect.setSelectItems(expressionItemList);
AtomicInteger atomicInteger = new AtomicInteger(1);
List<Join> joinList = Stream.of(new String[2]).map(item -> {
Join join = new Join();
join.setLeft(true);
Table joinTable = new Table();
joinTable.setName("table" + atomicInteger.incrementAndGet());
joinTable.setAlias(new Alias("t" + atomicInteger.get()));
join.setRightItem(joinTable);
EqualsTo equalsTo = new EqualsTo();
equalsTo.setLeftExpression(new Column(table, "f1"));
equalsTo.setRightExpression(new Column(joinTable, "f2"));
join.setOnExpression(equalsTo);
return join;
}).collect(Collectors.toList());
plainSelect.setJoins(joinList);
//條件
EqualsTo leftEqualsTo = new EqualsTo();
leftEqualsTo.setLeftExpression(new Column(table, "f1"));
StringValue stringValue = new StringValue("1222121");
leftEqualsTo.setRightExpression(stringValue);
plainSelect.setWhere(leftEqualsTo);
EqualsTo rightEqualsTo = new EqualsTo();
rightEqualsTo.setLeftExpression(new Column(table, "f2"));
StringValue stringValue1 = new StringValue("122212111111");
rightEqualsTo.setRightExpression(stringValue1);
OrExpression orExpression = new OrExpression(leftEqualsTo, rightEqualsTo);
plainSelect.setWhere(orExpression);
//分組
GroupByElement groupByElement = new GroupByElement();
groupByElement.setGroupByExpressions(Arrays.asList(new Column(table, "f1")));
plainSelect.setGroupByElement(groupByElement);
System.out.println(plainSelect);
//排序
OrderByElement orderByElement = new OrderByElement();
orderByElement.setAsc(true);
orderByElement.setExpression(new Column(table, "f1"));
OrderByElement orderByElement1 = new OrderByElement();
orderByElement1.setAsc(false);
orderByElement1.setExpression(new Column(table, "f2"));
//分頁
Limit limit = new Limit();
limit.setRowCount(new LongValue(2));
limit.setOffset(new LongValue(10));
plainSelect.setLimit(limit);
plainSelect.setOrderByElements(Arrays.asList(orderByElement, orderByElement1));
System.out.println(SQLFormatterUtil.format(plainSelect.toString()));
System.out.println("==================================================建立查詢====================================================");
}
//在原有的sql基礎上改
public static void changeSelect() {
System.out.println("==================================================改變原有查詢====================================================");
CCJSqlParserManager parserManager = new CCJSqlParserManager();
try {
Select select = (Select) (parserManager.parse(new StringReader("select * from table")));
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
//建立查詢的表
Table table = new Table("table");
table.setAlias(new Alias("t"));
plainSelect.setFromItem(table);
//建立查詢的列
List<String> selectColumnsStr = Arrays.asList("f1", "f2");
List<SelectItem> expressionItemList = selectColumnsStr.stream().map(item -> {
SelectExpressionItem selectExpressionItem = new SelectExpressionItem();
selectExpressionItem.setExpression(new Column(table, item));
return (SelectItem) selectExpressionItem;
}).collect(Collectors.toList());
SelectExpressionItem selectExpressionItem = new SelectExpressionItem();
selectExpressionItem.setAlias(new Alias("count"));
Function function = new Function();
function.setName("count");
ExpressionList expressionList = new ExpressionList();
expressionList.setExpressions(Arrays.asList(new Column(table, "f1")));
function.setParameters(expressionList);
selectExpressionItem.setExpression(function);
expressionItemList.add(selectExpressionItem);
plainSelect.setSelectItems(expressionItemList);
AtomicInteger atomicInteger = new AtomicInteger(1);
List<Join> joinList = Stream.of(new String[2]).map(item -> {
Join join = new Join();
join.setLeft(true);
Table joinTable = new Table();
joinTable.setName("table" + atomicInteger.incrementAndGet());
joinTable.setAlias(new Alias("t" + atomicInteger.get()));
join.setRightItem(joinTable);
EqualsTo equalsTo = new EqualsTo();
equalsTo.setLeftExpression(new Column(table, "f1"));
equalsTo.setRightExpression(new Column(joinTable, "f2"));
join.setOnExpression(equalsTo);
return join;
}).collect(Collectors.toList());
plainSelect.setJoins(joinList);
//條件
EqualsTo leftEqualsTo = new EqualsTo();
leftEqualsTo.setLeftExpression(new Column(table, "f1"));
StringValue stringValue = new StringValue("1222121");
leftEqualsTo.setRightExpression(stringValue);
EqualsTo rightEqualsTo = new EqualsTo();
rightEqualsTo.setLeftExpression(new Column(table, "f2"));
StringValue stringValue1 = new StringValue("122212111111");
rightEqualsTo.setRightExpression(stringValue1);
OrExpression orExpression = new OrExpression(leftEqualsTo, rightEqualsTo);
plainSelect.setWhere(orExpression);
//分組
GroupByElement groupByElement = new GroupByElement();
groupByElement.setGroupByExpressions(Arrays.asList(new Column(table, "f1")));
plainSelect.setGroupByElement(groupByElement);
System.out.println(plainSelect);
//排序
OrderByElement orderByElement = new OrderByElement();
orderByElement.setAsc(true);
orderByElement.setExpression(new Column(table, "f1"));
OrderByElement orderByElement1 = new OrderByElement();
orderByElement1.setAsc(false);
orderByElement1.setExpression(new Column(table, "f2"));
//分頁
Limit limit = new Limit();
limit.setRowCount(new LongValue(2));
limit.setOffset(new LongValue(10));
plainSelect.setLimit(limit);
plainSelect.setOrderByElements(Arrays.asList(orderByElement, orderByElement1));
System.out.println(SQLFormatterUtil.format(plainSelect.toString()));
} catch (JSQLParserException e) {
e.printStackTrace();
}
System.out.println("==================================================改變原有查詢====================================================");
}
//建立插入sql語句
public static void createInsert() {
System.out.println("==================================================建立插入語句====================================================");
Insert insert = new Insert();
Table table = new Table();
table.setName("table");
insert.setTable(table);
insert.setColumns(Arrays.asList(
new Column(table, "f1"),
new Column(table, "f2"),
new Column(table, "f3")
));
MultiExpressionList multiExpressionList = new MultiExpressionList();
multiExpressionList.addExpressionList(Arrays.asList(
new StringValue("1"),
new StringValue("2"),
new StringValue("3")
));
insert.setItemsList(multiExpressionList);
System.out.println(insert);
System.out.println("==================================================建立插入語句====================================================");
}
//建立插入sql語句
public static void createUpdate() {
System.out.println("==================================================建立更新語句====================================================");
Update update = new Update();
Table table = new Table();
table.setName("table");
update.setTable(table);
update.setColumns(Arrays.asList(
new Column(table, "f1"),
new Column(table, "f2"),
new Column(table, "f3")
));
update.setExpressions(Arrays.asList(
new StringValue("1"),
new StringValue("6"),
new StringValue("2")
));
//條件
EqualsTo leftEqualsTo = new EqualsTo();
leftEqualsTo.setLeftExpression(new Column(table, "f1"));
StringValue stringValue = new StringValue("1222121");
leftEqualsTo.setRightExpression(stringValue);
EqualsTo rightEqualsTo = new EqualsTo();
rightEqualsTo.setLeftExpression(new Column(table, "f2"));
StringValue stringValue1 = new StringValue("122212111111");
rightEqualsTo.setRightExpression(stringValue1);
OrExpression orExpression = new OrExpression(leftEqualsTo, rightEqualsTo);
update.setWhere(orExpression);
System.out.println(update);
System.out.println("==================================================建立更新語句====================================================");
}
//建立插入sql語句
public static void createDelete() {
System.out.println("==================================================建立刪除語句====================================================");
Delete delete = new Delete();
Table table = new Table();
table.setName("table");
delete.setTable(table);
//條件
EqualsTo leftEqualsTo = new EqualsTo();
leftEqualsTo.setLeftExpression(new Column(table, "f1"));
StringValue stringValue = new StringValue("1222121");
leftEqualsTo.setRightExpression(stringValue);
EqualsTo rightEqualsTo = new EqualsTo();
rightEqualsTo.setLeftExpression(new Column(table, "f2"));
StringValue stringValue1 = new StringValue("122212111111");
rightEqualsTo.setRightExpression(stringValue1);
OrExpression orExpression = new OrExpression(leftEqualsTo, rightEqualsTo);
delete.setWhere(orExpression);
System.out.println(delete);
System.out.println("==================================================建立刪除語句====================================================");
}
}
相關文章
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- 使用SQL語句去掉重複記錄的兩種方法SQL
- MySQL 記錄所有執行了的 sql 語句MySql
- 用SQL語句去掉重複的記錄SQL
- 【Tips】使用SQL生成外來鍵的SQL建立語句SQL
- 查詢orcale執行的SQL語句記錄SQL
- SQL語句筆記SQL筆記
- SQL語句圖表生成工具ChartSQLSQL
- 【PL/SQL】使用變數傳遞方法生成表更名的SQL語句SQL變數
- 【SQLLDR】使用SQL*Loader輔助生成外部表建立語句SQL
- 使用DataSource-Proxy在Spring Boot中記錄SQL語句 - Vlad MihalceaSpring BootSQL
- 定時生成分月表sql語句SQL
- 根據DELTA自動生成SQL語句SQL
- sql 中的with 語句使用SQL
- 【轉義】使用SQL生成SQL語句時單引號的轉義處理SQL
- 用SQL語句刪除重複記錄的四種方法SQL
- Oracle 查詢並刪除重複記錄的SQL語句OracleSQL
- 利用sql語句找出表中有重複記錄的三種sql寫法SQL
- MySQL 使用tee記錄語句和輸出日誌MySql
- 使用sql語句分析雙色球SQL
- SQL語句使用總結(一)SQL
- SQL查詢語句使用 (轉)SQL
- 使用mysqlsniffer捕獲SQL語句MySql
- Java學習筆記--sql語句Java筆記SQL
- EFCore常規操作生成的SQL語句一覽SQL
- SQL語句SQL
- 【SQL Server學習筆記】Delete 語句、Output 子句、Merge語句SQLServer筆記delete
- 使用hint來調優sql語句SQL
- 自定義註解例項實現SQL語句生成SQL
- php如何嫵媚地生成執行的sql語句PHPSQL
- 【轉義】使用SQL生成SQL語句時單引號的轉義處理之q'{}'方法SQL
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- Sql語句實現不同記錄同一屬性列的差值計算SQL
- 一條Sql語句:取出表A中第31到第40記錄(面試題)SQL面試題
- oracle之PLSql語言(二)sql語句的使用OracleSQL
- sql語句大全SQL
- 共享SQL語句SQL
- SQL語句整理SQL