六边形工程师
主页
文章
开源
关于我
1024创新实验室
微信号:卓大 (六边形工程师)
毕业于:山东大学 计算机
地点:洛阳/郑州/上海
职位:六边形数字科技-CEO
近期:专注AI+中医/供应链/教育
技能:CTO / 产品经理 / 全栈工程师
领域:教育,供应链,中医大健康;
公众号:六边形工程师
名称:六边形工程师
分享:赚钱、代码、生活
分享:AI发展、AI变现
分享:互联网 运营/产品/技术
关注 :中医健康问题
四、SmartDb超级好用的Sql Builder模式
|
分类于
SmartDb
SmartDb
前言:
对于简单的sql操作,可以直接使用ORM或者直接写Sql就可以,但是对于有些复杂的Sql场景如何操作呢,这么这个时候非常好用的Sql Builder 模式闪亮登场,只需2分钟就能带你领略他的强大(预计阅读1分钟)
#### 1、SqlBuilder 认知 从字面意义就可以了解,SqlBuilder的含义是 Sql的构造器,所以SmartDb一共提供了5种Sql构造器,分别为: 1) SelectSqlBuilder 查询语句 2) InsertSqlBuilder 插入语句 3) UpdateSqlBuilder 更新语句 4) DeleteSqlBuilder 删除语句 5) 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
allParams = sqlBuilder.getAllParams(); ``` #### 3、插入 InsertSqlBuilder 使用 ##### 3.1 sql 语句插入 主要有`insertColumn`和`insertFunctionColumn`两个方法 - 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
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
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一样
阅读 (4986)
喜欢 (
0
)
评论 (0)
走起吐槽