1024创新实验室-公告

助力抖音1000个粉丝,开播写代码🎉🎉

打开【抖音APP】-点击【左上角侧边栏】-【点击扫一扫】-【进行关注】🎉🎉


和1024创新实验室一起,热爱代码,热爱生活,永远年轻,永远前行🎉🎉


Skip to content

SmartDb超级好用的Sql Builder模式

对于简单的sql操作,可以直接使用ORM或者直接写Sql就可以,但是对于有些复杂的Sql场景如何操作呢,这么这个时候非常好用的Sql Builder 模式闪亮登场,只需2分钟就能带你领略他的强大。

1、SqlBuilder 认知

从字面意义就可以了解,SqlBuilder的含义是 Sql的构造器,所以SmartDb一共提供了5种Sql构造器,分别为:

    1. SelectSqlBuilder 查询语句
    1. InsertSqlBuilder 插入语句
    1. UpdateSqlBuilder 更新语句
    1. DeleteSqlBuilder 删除语句
    1. ReplaceSqlBuilder replace语句

当然以上分别为接口,具体不同的数据库类型有不同的实现方式,可以参考源码进行学习。

2、SqlBuilder 使用

2.1 创建SqlBuilder

可以直接使用 SmartDb 对象获取相关SqlBuilder

java
SelectSqlBuilder selectSqlBuilder = smartDb.selectSqlBuilder();
InsertSqlBuilder insertSqlBuilder = smartDb.insertSqlBuilder();
UpdateSqlBuilder updateSqlBuilder = smartDb.updateSqlBuilder();
DeleteSqlBuilder deleteSqlBuilder = smartDb.deleteSqlBuilder();
ReplaceSqlBuilder replaceSqlBuilder = smartDb.replaceSqlBuilder();

2.2 SqlBuilder方法

  • 1)生成 sql 语句
  • 2)获取 sql 语句的参数
java
// 生成Sql (不换行的sql)
String sql = sqlBuilder.generateSql();
// 生成Sql (换行的sql !)
String sql = sqlBuilder.generateSql(true);
// 获取所有Sql参数
List<Object> allParams = sqlBuilder.getAllParams();

3、插入 InsertSqlBuilder 使用

3.1 sql 语句插入

主要有insertColumninsertFunctionColumn两个方法

  • insertColumn 主要用于 有实际参数的 字段
  • insertFunctionColumn 主要用于方法的字段,比如 now(), uuid(), 等等,需要直接注入的
java
int rows = smartDb.insertSqlBuilder() // 获取 sql builder
        .table("t_user") // 表 名
        .insertColumn("name","") // 列名 和 对应的值
        .insertColumn("city","洛阳") // 列名 和 对应的值
        .insertFunctionColumn("uuid","uuid()") // 列名 , 此列为函数
        .insertFunctionColumn("create_time","now()") // 列名 , 此列为函数
        .execute(); // 执行

3.2 ORM 插入

java
int rows = smartDb.insertSqlBuilder()
        .insertEntity(userEntity) // ORM插入对象(包含属性为null的数据)
        .execute();
		
int rows = smartDb.insertSqlBuilder()
        .insertEntitySelective(userEntity) //  ORM插入对象,排除属性为null的数据
        .execute();

3、查询 SelectSqlBuilder 使用

默认支持 and 、 or 、 like等等
单表查询

java
List<UserEntity> entityList = smartDb.selectSqlBuilder()
        .select("username, city") // 查询 username和city两个自字段,需要用 , 分割
        .select(" update_time") // 查询 update time字段
        .select("create")
        .from("t_user") // 表名
        .whereAnd("id = 1") // and 过滤
        .whereAnd("id = ?", 1)// 切记带上 ? 问号
        .whereAndIn("id", Arrays.asList(1, 2, 3)) // 非常简单的 in 语句
        .whereAndLikePatterns("name", "%卓%") // name 列 like 查询带有 “卓” 的名字
        .whereAndLikeColumns("%卓%", "nickname", "username") // nickname和username 两列 like 查询带有 “卓” 的名字
        // 以下 为 or 语句
        .whereOr("id = 1")
        .whereOrIn("id", Arrays.asList(1, 2, 3)) // 非常简单的 in 语句
        .queryList(UserEntity.class); // 查询列表

多表关联查询: 支持 joinLeft / joinRight / joinFull / joinInner

java
smartDb.selectSqlBuilder()
        .select("t1.name as username")
        .select("t1.city")
        .select("t1.role_name")
        .from("t_user as t1")// 表名 重命名
        .joinLeft("t_user_role t2 on t1.id = t2.user_id") // 关联
        .joinLeft("t_user_position t3 on t1.id = t3.user_id") // 关联 
        .whereAnd("t3.id = ?",1)
        .queryList(UserEntity.class);

分页查询:paginate方法

java
PaginateResult<UserEntity> paginateResult = smartDb.selectSqlBuilder()
        .select("username, city") // 查询 username和city两个自字段,需要用 , 分割
        .select(" update_time") // 查询 update time字段
        .select("create")
        .from("t_user") // 表名
        .whereAnd("id > 1") // and 过滤
        .paginate(UserEntity.class, new SmartDbPaginateParam(1, 10));

4、更新 UpdateSqlBuilder 使用

直接更新

int rows = smartDb.updateSqlBuilder()
        .table("t_user") // 表名
        .updateColumn("name = '卓大'") //字段
        .updateColumn("city = ?","洛阳") // 带参数字段
        .whereAnd("id = ?", 1) // where 同 SelectSqlBuilder
        .execute();

ORM更新

java
int rows = smartDb.updateSqlBuilder()
        .updateEntity(userEntity) // ORM更新对象(包含属性为null的数据)
        .execute();

int rows = smartDb.updateSqlBuilder()
        .updateEntitySelective(userEntity) //  ORM更新对象,排除属性为null的数据
        .execute();

5、删除 DeleteSqlBuilder 使用

和 SelectSqlBuilder 一样

java
int rows = smartDb.deleteSqlBuilder()
        .table("t_user")
        .whereAnd("id = ?", id) // 支持and 和 or
        .execute();

6、替换 ReplaceSqlBuilder 使用

同 InsertSqlBuilder一样


联系我们

1024创新实验室-主任:卓大,混迹于各个技术圈,研究过计算机,熟悉点 java,略懂点前端。
1024创新实验室 致力于成为中原领先、国内一流的技术团队, 以AI+数字化为驱动,用技术为产业互联网提供无限可能, 业务如下:
  • 教育(就业创业大数据平台、继续教育平台、在线教育系统、题库、医学考试、专升本等)
  • 供应链(网络货运、大宗贸易进销存ERP、物流TMS、B2B电商、仓储WMS、AI提效等)
  • 中医大健康(诊所数字化管理、AI辅助诊疗、中医适宜技术、在线问诊、空中药房等)
  • AI+软件(软件定制外包、数据大屏、国产化改造、人员外包、技术顾问、技术培训等)
  • 欢迎各类合作哦,一起赚钱~
加微信: 卓大
拉你入群,一起学习
公众号 :六边形工程师
分享:赚钱、代码、生活
请 “1024创新实验室”
烩面里加肉
咖啡配胡辣汤,提神又饱腹
抖音 : 六边形工程师
直播:赚钱、代码、中医