mybatis动态标签<where><if><foreach>以及sql片段

1.创建一个包装类UserQueryVo.java

  1. package cn.my.mybatis.entity;
  2.  
  3. public class UserQueryVo {
  4.  
  5. private User user;
  6.  
  7. public User getUser() {
  8. return user;
  9. }
  10.  
  11. public void setUser(User user) {
  12. this.user = user;
  13. }
  14. }

2.UserMapp.xml里面添加新增一个查询sql

  1. <!-- 入参类型是包装类 -->
  2. <select id="findByNameAndSex" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
  3. select * from user
  4. <!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
  5. <where>
  6. <if test="user != null">
  7. <if test="user.sex != null and user.sex != ''">
  8. and sex=#{user.sex}
  9. </if>
  10. <if test="user.username != null and user.username != ''">
  11. and username=#{user.username}
  12. </if>
  13. </if>
  14. </where>
  15. </select>

3.UserDaoMapper.java文件中添加映射方法

  1. public List<User> findByNameAndSex(UserQueryVo userVo);

4.TestUserMapper.java文件中添加测试方法

  1. /**
  2. * 根据名称和sex查询
  3. */
  4. @Test
  5. public void testFindByNameAndSex(){
  6. SqlSession session = factory.openSession();
  7. UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
  8. //这里就是构建包装类
  9. UserQueryVo userQueryVo = new UserQueryVo();
  10. User user = new User();
  11. user.setUsername("王小二");
  12. user.setSex("男");
  13. userQueryVo.setUser(user);
  14.  
  15. List<User> list = dao.findByNameAndSex(userQueryVo);
  16. session.commit();
  17. session.close();
  18. System.out.println(list);
  19. }

运行结果:[User [id=28, username=王小二, sex=男, birthday=Sat Sep 23 00:00:00 CST 2017, address=河南郑州]]

上面where和if标签都是使用过了

foreach标签使用

1.UserMapp.xml里面添加新增一个查询sql

  1. <!-- 入参类型是包装类 -->
  2. <select id="findByIds" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
  3. select * from user
  4. <!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
  5. <where>
  6. <if test="listIds != null">
  7. collection:UserQueryVo的属性名,item表示临时名称下面使用的,open:拼接字符串的开始,close拼接字符串的结束,separator:分隔符
  8. <foreach collection="listIds" item="id" open=" id in (" close=")" separator=",">
  9. #{id}
  10. </foreach>
  11. </if>
  12. </where>
  13. </select>

2.UserDaoMapper.java文件中添加映射方法

  1. public List<User> findByIds(UserQueryVo userVo);

3.TestUserMapper.java文件中添加测试方法

  1. @Test
  2. public void testFindByIds(){
  3. SqlSession session = factory.openSession();
  4. UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
  5. //这里就是构建包装类
  6. UserQueryVo userQueryVo = new UserQueryVo();
  7. List<Integer> ids = new ArrayList<Integer>();
  8. ids.add(1);
  9. ids.add(10);
  10. ids.add(22);
  11. userQueryVo.setListIds(ids);
  12.  
  13. List<User> list = dao.findByIds(userQueryVo);
  14. session.commit();
  15. session.close();
  16. for (User user : list) {
  17. System.out.println(user);
  18. }
  19. }

sql语句为:

  1. select * from user WHERE id in ( ? , ? , ? )

运行结果:

User [id=1, username=王五, sex=2, birthday=null, address=null]
User [id=10, username=张三, sex=1, birthday=Thu Jul 10 00:00:00 CST 2014, address=北京市]
User [id=22, username=陈小明, sex=1, birthday=null, address=河南郑州]

上面基本的都讲完了,还差最后一个sql片段了

那我们把UserMapper.xml改造一下即可,里面只讲条件提取到sql标签中了,其它的所有代码都不需要变化。上代码

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5.  
  6. <mapper namespace="cn.my.dao.UserDaoMapper">
  7. <select id="findById" parameterType="int" resultType="cn.my.mybatis.entity.User">
  8. select * from user where id=#{id}
  9. </select>
  10.  
  11. <!-- sql片段 -->
  12. <sql id="byNameAndSex_where">
  13. <if test="user != null">
  14. <if test="user.sex != null and user.sex != ''">
  15. and sex=#{user.sex}
  16. </if>
  17. <if test="user.username != null and user.username != ''">
  18. and username=#{user.username}
  19. </if>
  20. </if>
  21. </sql>
  22.  
  23. <!-- 入参类型是包装类 -->
  24. <select id="findByNameAndSex" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
  25. select * from user
  26. <!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
  27. <where>
  28. <!-- 将原有的代码直接写进sql标签中就搞定,如果sql片段在其它xml文件中那么直接引入其它文件的sql片段路径即可 -->
  29. <include refid="byNameAndSex_where"/>
  30. </where>
  31. </select>
  32.  
  33. <!-- sql片段 -->
  34. <sql id="byIds_where">
  35. <if test="listIds != null">
  36. <!-- collection:UserQueryVo的属性名,item表示临时名称下面使用的,open:拼接字符串的开始,close拼接字符串的结束,separator:分隔符 -->
  37. <foreach collection="listIds" item="id" open=" id in (" close=")" separator=",">
  38. #{id}
  39. </foreach>
  40. </if>
  41. </sql>
  42.  
  43. <!-- 入参类型是包装类 -->
  44. <select id="findByIds" parameterType="cn.my.mybatis.entity.UserQueryVo" resultType="cn.my.mybatis.entity.User">
  45. select * from user
  46. <!-- where标签可以去掉首个and ,sql动态标签和jstl标签很类似,大家看一下应该就差不多了 -->
  47. <where>
  48. <!-- 将原有的代码直接写进sql标签中就搞定,如果sql片段在其它xml文件中那么直接引入其它文件的sql片段路径即可 -->
  49. <include refid="byIds_where"/>
  50. </where>
  51. </select>
  52.  
  53. <!-- 新增映射 修改id名称为了以后封装basedao-->
  54. <insert id="insert" parameterType="cn.my.mybatis.entity.User">
  55. <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  56. SELECT LAST_INSERT_ID()
  57. </selectKey>
  58. INSERT INTO `user` (`username`,`birthday`,`sex`,`address`)
  59. VALUES(#{username},#{birthday},#{sex},#{address})
  60. </insert>
  61.  
  62. <!-- 修改用户 修改id名称为了以后封装basedao-->
  63. <update id="update" parameterType="cn.my.mybatis.entity.User">
  64. UPDATE `user`
  65. SET
  66. `username` = #{username},
  67. `birthday` = #{birthday},
  68. `sex` = #{sex},
  69. `address` = #{address}
  70. WHERE `id` = #{id} ;
  71. </update>
  72. <!-- 删除 修改id名称为了以后封装basedao -->
  73. <delete id="delete" parameterType="java.lang.Integer">
  74. delete from user where id=#{id}
  75. </delete>
  76. </mapper>
  1. 写得可能不够好,如果有需要加群一起研究的可以q我,939705214,也可以直接加群号581591235,也可以加微信群号

  1.  

mybatis快速入门(四)的更多相关文章

  1. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  3. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

  4. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  5. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  6. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  7. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  8. MyBatis学习笔记(一)——MyBatis快速入门

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...

  9. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

随机推荐

  1. Phone文件备份

    一 把照片导入到本地 连接手机和PC,插上数据线后PC上会自动检测并弹出对话框,提示导入 可以指定导入的目录.确定之后点击导入即可开始执行导入操作. 二 把语音备忘录导入到本地 需要借助iTunes联 ...

  2. mac给文件批量添加后缀名

    for i in *;do mv "$i" "$i.mp4";done

  3. CentOS利用Nginx+Docker部署.netcore应用

    安装docker 官方文档https://docs.docker.com/engine/installation/linux/docker-ce/centos/ [root@sn ~]# yum re ...

  4. try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?

    这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后, 看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的, ...

  5. Yii2中DAO

    数据库访问 (DAO) 创建数据库连接 执行 SQL 查询 引用表和列名称 执行事务 复制和读写分离 操纵数据库模式 Yii 包含了一个建立在 PHP PDO 之上的数据访问层 (DAO).DAO为不 ...

  6. 使用C#开发C/S框架高级版添加新项目实例

    操作步骤: 1.新建一个项目CSFramework3.test,在CSFramework3.test项目下新建一个FormMan窗口(此时不需要继承). 2.按F7打开类,替换一下引用 using S ...

  7. 恢复Mysql丢失的root用户权限

      今天安装了某个程序时, 由于程序很傻X的 新建了一个 root@localhost 用户 并把 root权限全部改为了 no 这下 我也 傻X 了.服务器上所有程序都崩溃了. 此时即使用root用 ...

  8. hbase 命令

    HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...

  9. python 常见错误和异常 函数 正则表达式及多线程编程

    生成随机密码#!/usr/bin/env python import stringfrom random import choice def gen_pass(num=9): all_chs = st ...

  10. rpm检验是否被改动过

    参考原文http://vbird.dic.ksu.edu.tw/linux_basic/0520rpm_and_srpm.php#rpmmanager_verify   rpm -qVa   (当然可 ...