| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 第十六章:mybatis-plus 查询组件(动态生成SQL) -> 正文阅读 |
|
[大数据]第十六章:mybatis-plus 查询组件(动态生成SQL) |
前面绍了mybatis-plus的大部分功能,大家有没有发现那些功能都是基本依赖具体的实体类来处理数据,这个在实际的业务开发没有问题,但是我们有没有考虑过在某些特殊场景下,我们只需要查询,而且需要关联多个table,而且在系统业务中这样查询很多,所以我们需要开发一个这样组件,自已根据业务来写sql,绑定变量,然后返回结果。我们先看一下来mybatis如何动态生成sql:1.mybatis官方文档中有一个可以动态生成sql的方式:@Update({ "<script>", "update Author", " <set>", " <if test='username != null'>username=#{username},</if>", " <if test='password != null'>password=#{password},</if>", " <if test='email != null'>email=#{email},</if>", " <if test='bio != null'>bio=#{bio}</if>", " </set>", "where id=#{id}", "</script>"}) void updateAuthorValues(Author author); 2.根据mybatis原理,其实sql里#{email}中是传参的成员值,这个成员可以某个类型的成员或者map中存在的key-value根据以上内容,我们可以定个简易版本的查询组件:1.准备maaper public interface DynamicQueryMapper extends BaseMapper { @Select( {"<script>", " ${sql}", "</script>"} ) List<Map<String,Object>> selectCondition(Map map); } 2.准备测试类@SpringBootTest class DynamicTests { @Autowired private DynamicQueryMapper dynamicQueryMapper; @Test public void testCallProcedure(){ HashMap<String,Object> map=new HashMap<String,Object>(); map.put("sql","select * from user where name like #{name1} or name like #{name2} "); map.put("name1","%o%"); map.put("name2","%x%"); List<Map<String,Object>> maps= dynamicQueryMapper.selectCondition(map); maps.forEach(System.out::println); } } 3.测试log2022-10-16 20:51:21.503 DEBUG 18172 --- [ main] c.m.s.m.d.D.selectCondition : ==> Preparing: SELECT * FROM user WHERE (name LIKE ? OR name LIKE ?) AND user.FAB = 'FAB1' 2022-10-16 20:51:21.533 DEBUG 18172 --- [ main] c.m.s.m.d.D.selectCondition : ==> Parameters: %o%(String), %x%(String) Consume Time:16 ms 2022-10-16 20:51:21 Execute SQL:SELECT * FROM user WHERE (name LIKE '%o%' OR name LIKE '%x%') AND user.FAB = 'FAB1' 2022-10-16 20:51:21.603 DEBUG 18172 --- [ main] c.m.s.m.d.D.selectCondition : <== Total: 220 从上面的方法可以看来在map中put sql内容,在put sql中需要绑定的变量值就可以得sql的值从上面不难看到我们如果在设计开发一个查询组件是很轻松的事情,比如sql在画面某配置好,保存到db中,在实际业务使用时根据保存的sql id来获取,并传入相应需绑定变量值就可以轻松搞定 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 7:45:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |