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

本文共 3529 字,大约阅读时间需要 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/wangyage/p/7198920.html

你可能感兴趣的文章
python中一切皆对象------类的基础(五)
查看>>
modprobe
查看>>
android中用ExpandableListView实现三级扩展列表
查看>>
%Error opening tftp://255.255.255.255/cisconet.cfg
查看>>
java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
查看>>
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
查看>>
python多线程队列安全
查看>>
[汇编语言学习笔记][第四章第一个程序的编写]
查看>>
android 打开各种文件(setDataAndType)转:
查看>>
补交:最最原始的第一次作业(当时没有选上课,所以不知道)
查看>>
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
软件测试(二)之 Failure, Error & Fault
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
角色权限分配
查看>>