- 使用环境
- 使用方法
- 代码示例
- 获取SqlBuilder实例
- 拼接sql
- 拼接select语句
- 拼接update、delete语句
- 拼接where条件
- 其他方法说明
- 下载地址
JDK1.8+
Spring
slf4j-api
- SpringBoot或SpringCloud下
直接引入sql-builder.jar - Spring工程
1、引入sql-builder.jar
2、在扫描类上增加@Import注解,如下
3、或者在bean.xml中增加标签(未测试)
@Configuration
@ComponentScan(value="org.example.config")
@Import(value = com.leewin.db.sql.AutoInitSqlBuilderFactory.class)
public class Application {
}
代码示例 获取SqlBuilder实例
引入本包后,启动时会自动判断所使用的数据库。目前只支持Oracle、MySQL、PostgreSQL。自动获取SqlBuilder
SqlBuilder builder = SqlBuilderFactory.getBuilder()
当然也可以根据指定类型获取SqlBuilder实例
SqlBuilder builder = SqlBuilderFactory.getBuilder(DBType.ORACLE);拼接sql
- 使用appen()方法拼接主体sql
- 使用andXxx()、orXxx()、add()等方法拼接条件语句
- 使用build()方法结束拼接
- 使用getText()方法获取拼接的语句
- 使用getParam()方法获取参数列表
SqlBuilder builder = SqlBuilderFactory.getBuilder();
builder.append("select * from user_table ut")
.append("left join user_area ua on ut.pk_area = ua.pk_area")
.andGtTime("ut.create_time", "2022-03-31 15:01:37")
.build();
this.sout(builder, null);
输出sql:
select * from user_table ut
left join user_area ua on ut.pk_area = ua.pk_area
where ut.create_time > ?
参数:[Thu Mar 31 15:01:37 CST 2022]
拼接update、delete语句
SqlBuilder builder = SqlBuilderFactory.getBuilder();
builder.append("update user_table ut set ut.name = ? ", "daCongMing")
.andEq("ut.name", "jame")
.andGt("ut.age", 18)
.build();
//输出
sql:
update user_table ut set ut.name = ?
where ut.name = ?
and ut.age > ?
参数:[daCongMing, jame, 18]
拼接where条件
主要有andEq()、andLike()、andIn()、orEq、orIn()、andEqDate()、andEqTime()、orXxx()等主要常用方法。
- like条件拼接
其中like相关方法会对特殊字符进行转义。
Oracle、PostgreSQL下包含 ‘’ ‘%’ ‘_’ (转义字符为 ‘’)
MySql下包含 ‘’ ‘%’ ‘_’ ‘/’ (转义字符为 ‘/’)
提示:通过addEscape()增加需要转义的特殊字符
通过setEscapeChar()设置转义字符
SqlBuilder builder = SqlBuilderFactory.getBuilder();
builder.append("select * from user_table ut")
.andLike("name", Arrays.asList("na", "a%a", "n_"))
.build();
// 或
builder.append("select * from user_table")
.andLike("name", "\na")
.andLike("area", "a%b")
.andLike("area", "a_b")
//.andEq("area", "a_b")
.build();
// 输出
sql:
select * from user_table
where name like ? escape ''
and area like ? escape ''
and area like ? escape ''
and area = ?
参数:[%\na%, %a%b%, %a_b%, a_b]
- Date / Time条件拼接
在用到andEqDate(String field, String value)或orEqDate(String field, String value)方法时,会对值进行格式转换。这两个方法建议使用andGeDate()与andLeDate()方法代替。
Oracle/PostgreSQL会将field转换为to_char(field, ‘yyyy-mm-dd’)
MySql会将field转换为date_format(field, ‘%Y-%m-%d’)
提示:可以通过setDbDatePatter(String datePatter) 设置value的转换格式
在用到andEqTime(String field, String value) 或 orEqTime(String field, String value)方法时,会对值进行格式转换。这两个方法建议使用andGeDate()与andLeDate()方法代替。
Oracle/PostgreSQL会将field转换为to_char(field, ‘yyyy-mm-dd hh24:mi:ss’)
MySql会将field转换为date_format(field, ‘%Y-%m-%d %H:%i:%s’)
提示:可以通过setDbDateTimePatter(String datePatter) 设置value的转换格式
对于 其他的 andGtDate(String field, String value),andGtTime(String field, String value)等方法,会将value转换为Date类型。
默认转换格式为“yyyy-MM-dd” 或“yyyy-MM-dd HH:mm:ss”
提示:可以通过setJavaDateTimePattern(String)、setJavaDatePattern(String)进行设置
SqlBuilder builder = SqlBuilderFactory.getBuilder();
builder.append("select * from user_table")
.andEqDate("create_date", "2022-04-08")
.andGtDate("create_date", "2022-04-08")
.andGtDate("create_date", new Date())
.andEqTime("create_time", "2022-03-31 15:01:37")
.andGtTime("create_time", "2022-03-31 15:01:37")
.andGtTime("create_time", new Date())
.build();
// 输出
sql:
select * from user_table
where to_char(create_date, 'yyyy-mm-dd') = ?
and create_date > ?
and create_date > ?
and to_char(create_time, 'yyyy-mm-dd hh24:mi:ss') = ?
and create_time > ?
and create_time > ?
参数:
[2022-04-08, Fri Apr 08 00:00:00 CST 2022, Fri Apr 22 17:29:02 CST 2022,
2022-03-31 15:01:37, Thu Mar 31 15:01:37 CST 2022, Fri Apr 22 17:29:02 CST 2022]
其他方法说明
public OrBuilder andOr() {...}
public AndBuilder orAnd() {...}
public SqlBuilder over() {...}
public SqlBuilder add(String text) {...}
public SqlBuilder add(String text, Object... values) {...}
public SqlBuilder append(String text) {...}
public SqlBuilder append(String text, Object... values) {...}
下载地址
sql-builder.jar
sql-builder-api



