博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring+SpringMVC+MyBatis深入学习及搭建(五)——动态sql
阅读量:6239 次
发布时间:2019-06-22

本文共 3568 字,大约阅读时间需要 11 分钟。

转载请注明出处: 

前面有讲到

mybatis核心:对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

mybatis提供各种标签方法实现动态拼接sql。

1. if&where

1.2 需求

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。

对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

1.3 mapper.xml

     

1.4测试代码

@Test    public void findUserListTest() throws Exception{        SqlSession sqlSession=sqlSessionFactory.openSession();        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);        //创建包装对象,设置查询条件        UserQueryVo userQueryVo=new UserQueryVo();        UserCustom userCustom=new UserCustom();        //由于这里使用动态sql,如果不设置某个值,条件不会拼接在sql中//        userCustom.setSex("1");        userCustom.setUsername("张三丰");        userQueryVo.setUserCustom(userCustom);        List
list=userMapper.findUserList(userQueryVo); System.out.println(list); }

打印的sql:如果不设置sex的值,条件不会拼接在sql中

2.sql片段

2.1 需求

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

2.2 定义sql片段

and user.sex=#{userCustom.sex}
and user.username LIKE '%${userCustom.username}%'

2.3 引用sql片段

在mapper.xml中定义statement中引用sql片段:

     

3. foreach

向sql传递数组或List,mybatis使用foreach解析。

3.1 需求

在用户查询列表和查询总数的statement中增加多个id输入查询。

sql语句如下,两种方法:

SELECT * FROM USER WHERE id=1 OR id=10 OR id=16

SELECT * FROM USER WHERE id IN(1,10,16)

3.2 在输入参数类型中添加List<Integer> ids传入多个id

3.3 修改mapper.xml

WHERE id=1 OR id=10 OR id=16

在前面的查询条件中,查询条件定义成了一个sql片段,现在我们需要修改sql片段。

and user.sex=#{userCustom.sex}
and user.username LIKE '%${userCustom.username}%'
id=#{user_id}

3.4 测试代码

@Test    public void findUserListTest() throws Exception{        SqlSession sqlSession=sqlSessionFactory.openSession();        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);        //创建包装对象,设置查询条件        UserQueryVo userQueryVo=new UserQueryVo();        UserCustom userCustom=new UserCustom();        //由于这里使用动态sql,如果不设置某个值,条件不会拼接在sql中//        userCustom.setSex("1");        userCustom.setUsername("小明");        //传入多个id        List
ids=new ArrayList<>(); ids.add(1); ids.add(10); ids.add(16); userQueryVo.setIds(ids); userQueryVo.setUserCustom(userCustom); List
list=userMapper.findUserList(userQueryVo); System.out.println(list); }

 如果此文对您有帮助,微信打赏我一下吧~ 

转载于:https://www.cnblogs.com/Joanna-Yan/p/6908763.html

你可能感兴趣的文章
Scheme来实现八皇后问题(1)
查看>>
pip或者anacnda安装opencv以及opencv-contrib
查看>>
Unity 5 中的全局光照技术详解(建议收藏)
查看>>
python 的矩阵运算——numpy
查看>>
处理handler中的内存泄漏
查看>>
P8 Visible Lattice Points
查看>>
小小不爽一下
查看>>
【转】NuGet学习笔记(1)——初识NuGet及快速安装使用
查看>>
Python学习笔记 - MySql的使用
查看>>
WebApi FormData+文件长传 异步+同步实现
查看>>
Linux文件与目录管理
查看>>
多态的弊端
查看>>
Spring @Import 注解
查看>>
PBOC APDU命令解析【转】
查看>>
封装HttpUrlConnection开箱即用
查看>>
第二天笔记
查看>>
如何在外部终止一个pengding状态的promise对象
查看>>
初级模拟电路:1-5 二极管的其他特性
查看>>
《简明Python教程》Swaroop, C. H. 著 第1章 介绍
查看>>
Chapter 4. Working with Key/Value Pairs
查看>>