温馨提示:本站仅提供公开网络链接索引服务,不存储、不篡改任何第三方内容,所有内容版权归原作者所有
AI智能索引来源:http://www.jianshu.com/p/eab0dc6f32db
点击访问原文链接

MyBatis框架(9):动态sql - 简书

MyBatis框架(9):动态sql - 简书登录注册写文章首页下载APP会员IT技术MyBatis框架(9):动态sql奇点一氪关注赞赏支持MyBatis框架(9):动态sql 1.什么是动态sql
mybatis核心,对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

2.需求
用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。
对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

3.mapper.xml
原查询语句配置:

select * from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%' select count(*) from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%' ...... 修改后的查询语句配置:

select * from user and user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%' select count(*) from user and user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%' 4.测试代码 http://用户信息综合查询 @Test public void testFindUserList() throws Exception{ SqlSession sqlSession=sqlSessionFactory.openSession(); http://创建UserMapper代理对象 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); http://创建包装对象,设置查询条件 UserQueryVo userQueryVo=new UserQueryVo(); UserCustom userCustom=new UserCustom(); http://由于这里使用动态sql,如果这里不设置某个值,条件不会拼接在sql中 http://userCustom.setSex("男"); userCustom.setUsername("张三"); userQueryVo.setUserCustom(userCustom); http://调用userMapper的方法 List users=userMapper.findUserList(userQueryVo); for (int i = 0; i 测试结果:
1:张三
4:张三丰

输出日志:

DEBUG [main] - Opening JDBC Connection DEBUG [main] - Created connection 31761534. DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.Connection@1e4a47e] DEBUG [main] - ==> Preparing: select * from user WHERE user.username like '%张三%' DEBUG [main] - ==> Parameters: DEBUG [main] - 发现sql语句为select * from user WHERE user.username like '%张三%' ,并没有将sex拼接进去,说明我们的动态sql设置成功

相应的,把userCustom.setUsername("张三");也注释掉,发现输出日志:

DEBUG [main] - Opening JDBC Connection DEBUG [main] - Created connection 24027753. DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.Connection@16ea269] DEBUG [main] - ==> Preparing: select * from user DEBUG [main] - ==> Parameters: DEBUG [main] - 发现sql语句为select * from user,并没有将sex和username拼接进去,说明我们的动态sql设置成功

5.sql片段

5.1需求
将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。
方便程序员进行开发。

5.2定义sql片段

and user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%' ...... 5.3引用sql片段
在mapper.xml中定义的statement中引用sql片段

select * from user select count(*) from user 测试:

http://用户信息综合查询 @Test public void testFindUserList() throws Exception{ SqlSession sqlSession=sqlSessionFactory.openSession(); http://创建UserMapper代理对象 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); http://创建包装对象,设置查询条件 UserQueryVo userQueryVo=new UserQueryVo(); UserCustom userCustom=new UserCustom(); http://由于这里使用动态sql,如果这里不设置某个值,条件不会拼接在sql中 userCustom.setSex("男"); userCustom.setUsername("张三"); userQueryVo.setUserCustom(userCustom); http://调用userMapper的方法 List users=userMapper.findUserList(userQueryVo); for (int i = 0; i 测试结果:
1:张三
4:张三丰
输出日志:

DEBUG [main] - Opening JDBC Connection DEBUG [main] - Created connection 17689439. DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.Connection@10deb5f] DEBUG [main] - ==> Preparing: select * from user DEBUG [main] - ==> Parameters: DEBUG [main] - 说明sql片段引用成功
小结:
sql片段方便程序员进行开发

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。 相关阅读更多精彩内容MarkDown1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...笨鸟慢飞阅读 6,122评论 0赞 4JAVAEE——Mybatis(Mybatis介绍配置使用以及与Spring整合)Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache...day_Sunny阅读 2,870评论 0赞 63、输入和输出映射(mybatis笔记)一、输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型、HashMap、pojo的包装...yjaal阅读 993评论 0赞 2MyBatis-Mapper.xml(输入输出映射动态sql)讲解Mapper.xml映射文件 Mapper.xml映射文件定义了操作数据库的sql,每个sql是一个stateme...暗物质阅读 8,903评论 0赞 24.248.50到图书馆喝水 9.30之前复习了恋恋有词第十五单元 去上商贸英语课。 睡了午觉,喝了杯水,三点十 昨天做了...c28369096728阅读 374评论 0赞 0友情链接更多精彩内容美国西雅图攻略投资一家宠物酒店需要多少钱?石林峡风景区适合带宠物一起游玩吗?利川腾龙洞风景区带子真的有那么好吃吗?上海生日免费的景点你家宠物能帮忙驱蚊吗?这些驱蚊小技巧让毛孩子变身驱蚊小卫士!哈密旅游景点大全广州去武汉攻略高铁可以托运狗狗吗?狗半岁不吃狗粮怎么办国产狗粮怎么选?豆柴适合你家狗狗吗?如何正确使用宠物体温计为爱宠测量体温?热饮的品种和做法欧洲买表攻略电饭煲做板栗的做法泸州有什么特产狗狗可以每天吃肉吗?宠物饮食的必知小贴士昆明到版纳自驾游狗狗被猫咬了该怎么办?猫咪怀孕周期计算虎皮豆腐做法英伟达市场份额:高端芯片从 95% 到 0%,太惨烈佳木斯风景区适合带宠物一起游玩吗?观山湖公园有什么秘密狗狗总是不吃饭怎么办狗粮中的钙含量充足吗?高百丈风景区好玩吗狗狗的年龄怎么计算才准确?庐山自驾旅游攻略推荐阅读猫咪流红色眼泪怎么办俄尔则俄自驾游攻略,沿途有哪些必打卡景点?幼犬更换狗粮需要多久中午猫咪的瞳孔像什么日本有哪些旅游景点腊肉怎么蒸好吃又简单为什么说勇敢的狗狗从来不怕困难?11月张家口有什么好玩的衢州市景点免费有哪些猫咪什么时候可以驱虫江苏连云港有什么好玩的地方天姥山徒步路线有哪些值得推荐的?评论0赞77赞8赞赞赏手机看全文

智能索引记录