栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SQL拼接工具包,支持Oracle/PostgreSQL/MySql

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL拼接工具包,支持Oracle/PostgreSQL/MySql

SQL拼接工具包,支持Oracle/PostgreSQL/MySql
    • 使用环境
    • 使用方法
    • 代码示例
      • 获取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()方法获取参数列表
拼接select语句
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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826072.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号