博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7.平凡之路-动态SQL语句
阅读量:6238 次
发布时间:2019-06-22

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

动态SQL语句是核心之一,这里我们通过几个示例来演示

一 多条件查询专题

1.通过恒等式完成动态SQL语句

涉及到if标签

user_id,user_name,sex,money,birthday
${alias}.user_id,${alias}.user_name,${alias}.sex,${alias}.money,${alias}.birthday
  • 映射文件
  • Java测试代码
@Test    public void IF标签01(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            Map
query = new HashMap<>(); query.put("name", "悟"); query.put("sex", "男"); List
userList = sqlSession.selectList(User.class.getName()+".if01", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
  • 图解说明
    恒等式

2.where标签和if标签组合

  • 如果发现标签內有内容,那么会在内容的最前面加入关键字 where
  • 如果有内容,会检查内容的最前面是否含有 AND空格 或者 OR空格 ,自动将其抹掉
  • 映射文件
  • Java测试代码
@Test    public void IF标签02(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            Map
query = new HashMap<>(); query.put("name", "悟"); query.put("sex", "男"); List
userList = sqlSession.selectList(User.class.getName()+".if02", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
  • 图解说明

where标签

3.trim标签和if标签

  • 映射文件
  • Java测试代码
@Test    public void trim标签(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            Map
query = new HashMap<>(); query.put("name", "悟"); query.put("sex", "男"); List
userList = sqlSession.selectList(User.class.getName()+".if03", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
  • 图解说明
    trim标签

二 更新操作

1.set标签

  • 当你发现有内容的时候,在内容的最前面加入 set
  • 当你发现有内容的时候,检查内容的最后面是否有逗号"," 如果将其抹掉
  • 映射文件
UPDATE oa_user
user_name=#{user_name},
sex=#{sex},
money=#{money},
birthday=#{birthday},
WHERE user_id=#{user_id}
  • Java测试代码
@Test    public void 更新操作_变更数据库(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            //数据            User user = new User();            user.setUser_id(3);            user.setUser_name("天蓬元帅");            //日期的转换            String date = "1998-09-09";            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");            user.setBirthday(df.parse(date));            int row =sqlSession.update(User.class.getName()+".update01", user);            System.out.println(row);            //事务的提交            sqlSession.commit();        }catch (Exception ex) {            ex.printStackTrace();        }finally {            MyBatisUtils.closeSqlSession(sqlSession);        }    }
  • 图解说明
    set标签

2.trim标签完成更新

  • 映射文件
UPDATE oa_user
user_name=#{user_name},
sex=#{sex},
money=#{money},
birthday=#{birthday},
WHERE user_id=#{user_id}
  • Java测试代码
@Test    public void 更新操作_TRIM标签_变更数据库(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            //数据            User user = new User();            user.setUser_id(3);            user.setUser_name("天蓬元帅123");            //日期的转换            String date = "1998-10-09";            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");            user.setBirthday(df.parse(date));            int row =sqlSession.update(User.class.getName()+".update02", user);            System.out.println(row);            //事务的提交            sqlSession.commit();        }catch (Exception ex) {            ex.printStackTrace();        }finally {            MyBatisUtils.closeSqlSession(sqlSession);        }    }

三 choose 标签简单使用

  • 映射文件
  • Java测试代码
@Test    public void choose标签(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            Map
query = new HashMap<>(); query.put("sex", "女123213"); List
userList = sqlSession.selectList(User.class.getName()+".choose01", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }

四 小于号问题

  • 映射文件
    
  • Java测试代码
@Test    public void 小于号的解决问题(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            List
userList = sqlSession.selectList(User.class.getName()+".less01", 1.0*800); System.out.println(userList); userList = sqlSession.selectList(User.class.getName()+".less02", 1.0*600); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
  • 图解说明
    小于号问题解决问题

请参考附录1说明

五 动态添加语句

  • 映射文件
INSERT INTO oa_user
user_name,
sex,
money,
birthday,
#{user_name},
#{sex},
#{money},
#{birthday},
  • Java测试代码
@Test    public void 动态的添加语句(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            //数据            User user = new User();            user.setUser_name("刘备12333333");            //日期的转换            String date = "1998-10-09";            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");            user.setBirthday(df.parse(date));            user.setMoney(1111.11);            int row =sqlSession.insert(User.class.getName()+".add01", user);            System.out.println(row);            //事务的提交            sqlSession.commit();            System.out.println(user);        }catch (Exception ex) {            ex.printStackTrace();        }finally {            MyBatisUtils.closeSqlSession(sqlSession);        }    }

六 foreach标签

1.数组方式

  • 映射方式
DELETE FROM oa_user WHERE user_id in
#{shxt}
  • Java测试代码
@Test    public void 传递数组删除规则(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            int row = sqlSession.delete(User.class.getName()+".delete01", new int[]{5,6});            //事务的提交            sqlSession.commit();            System.out.println(row);        }catch (Exception ex) {            ex.printStackTrace();        }finally {            MyBatisUtils.closeSqlSession(sqlSession);        }    }

2.List方式

  • 映射文件
DELETE FROM oa_user WHERE user_id in
#{shxt}
  • Java测试代码
@Test    public void 传递集合删除规则(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            List
tempList = new ArrayList<>(); tempList.add(8); tempList.add(9); int row = sqlSession.delete(User.class.getName()+".delete02", tempList); //事务的提交 sqlSession.commit(); System.out.println(row); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }

3.Map方式

  • 映射方式
DELETE FROM oa_user WHERE user_id in
#{shxt}
  • Java测试代码
@Test    public void 传递Map删除规则(){        SqlSession sqlSession = null;        try {            sqlSession = MyBatisUtils.getSqlSession();            List
tempList = new ArrayList<>(); tempList.add(7); tempList.add(10); Map
map = new HashMap
(); map.put("id_array", tempList); int row = sqlSession.delete(User.class.getName()+".delete03", map); //事务的提交 sqlSession.commit(); System.out.println(row); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }
  • 图解方式
    个人比较喜欢

4.批量添加

  • 映射文件
INSERT INTO oa_user VALUES
(#{user.user_name},#{user.sex},#{user.money})

附录1 : MyBatis在xml文件中处理大于号小于号的方法

第一种方法:

用了转义字符把>和<替换掉,然后就没有问题了。

SELECT * FROM test WHERE 1 = 1 AND start_date  <= CURRENT_DATE AND end_date >= CURRENT_DATE

附:XML转义字符

转义图

第二种方法

因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析

你的可以写成这个:
mapper文件示例代码

  

转载地址:http://pzkia.baihongyu.com/

你可能感兴趣的文章
MySQL数据库的几种常见高可用方案
查看>>
java数组复制的几种常见用法
查看>>
去哪网实习总结:JavaWeb中文传參乱码问题的解决(JavaWeb)
查看>>
Xeon Phi之MIC编程知识点
查看>>
jigloo安装和介绍
查看>>
php monolog 的写日志到unix domain socket 测试终于成功
查看>>
【转】JSP中的9大隐藏对象
查看>>
荆慕瑶
查看>>
bilibili携手WeTest,保障视频类应用优质适配体验
查看>>
无线应用安全剖析
查看>>
GNU/Linux安全基线与加固-0.1
查看>>
当产品/后端/QA/你自己说了这些话,就要警惕了!
查看>>
聊聊directory traversal attack
查看>>
OC消息转发机制
查看>>
理解函数防抖Debounce
查看>>
10分钟了解react引入的hooks
查看>>
用一个简易的 web chat 说说 Python、Golang、Nodejs 的异步
查看>>
Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH
查看>>
【iOS开发】在Xcode中做一个 a包合成脚本
查看>>
注册、登录和 token 的安全之道
查看>>