• Mybatis动态sql


    1. /*
    2. *作者:呆萌老师
    3. *☑csdn认证讲师
    4. *☑51cto高级讲师
    5. *☑腾讯课堂认证讲师
    6. *☑网易云课堂认证讲师
    7. *☑华为开发者学堂认证讲师
    8. *☑爱奇艺千人名师计划成员
    9. *在这里给大家分享技术、知识和生活
    10. *各种干货,记得关注哦!
    11. *vx:it_daimeng
    12. */

    动态sql:

    1. If
    1.   <select id="getStudentBySname" resultMap="studentMap" parameterType="Student">
    2.       select * from student where 1=1
    3.       <if test="sname !=null">
    4.           and sname=#{sname}
    5.       if
    6.       <if test="age !=0">
    7.           and age=#{age}
    8.       if>     
    9.   select>

            2、Choose

    1.  <select id="getStudentByParam"
    2.      parameterType="Student" resultType="Student">
    3.   SELECT * FROM student WHERE 1=1
    4.  
    5.   <choose>
    6.     <when test="sname != null">
    7.       AND sname = #{sname}
    8.     when>
    9.     <when test="age!=0">
    10.       AND age=#{age}
    11.     when>
    12.     <otherwise>
    13.       AND 1=1
    14.     otherwise>
    15.   choose>
    16. select>

            3、Set

      

    1. <update id="updateStudent"
    2.        parameterType="Student">
    3.   update Student
    4.     <set>
    5.       <if test="sname != null">sname=#{sname},if>
    6.       <if test="age != 0">age=#{age},if>
    7.       <if test="grade != null and grade.gid!=0">gid=#{grade.gid},if
    8.     set>
    9.   where sid=#{sid}
    10. update>

            4、Foreach

      Foreach主要用在构建in条件中,它可以在sql语句中进行迭代一个集合。Foreach元素的属性主要有item,index,collection,open,separator,close.

    Item表示集合中每一个元素进行迭代时的别名。

    index指定一个名字,用于表示在迭代过程中,每次迭代到的位置。

    Open表示该语句以什么开始。

    Separator表示在每次进行迭代之间以什么符号进行分割

    Close表示该语句以什么结束.

    Collection属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有以下3种情况:

    1. 如果传入的是单参数且参数类型是一个list的时候,collection中的属性值为list
    2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
    3. 如果传入的参数是多个的时候,前面就需要把它们封装成一个map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个map的,mapkey就是参数名,所以这个时候collection的属性值就是传入的listarray对象在自己封装的map里面的key

    1:单参数list的类型

     Mapper层代码

    1.  <select id="selectStudentBySid" resultType="Student" >
    2.   SELECT *
    3.   FROM student
    4.   WHERE sid in
    5.   <foreach item="item" index="index" collection="list"
    6.       open="(" separator="," close=")">
    7.         #{item}
    8.   foreach>
    9. select>

    Dao层代码:

    public List selectStudentBySid(List list)

       {}

    封装list代码:

       List list=new ArrayList();

       list.add(1);

          list.add(2);

          list.add(3);

    2:单参数array数组的类型

     Mapper层代码

    1. <select id="selectStudentBySid" resultType="Student" >
    2.   SELECT *
    3.   FROM student
    4.   WHERE sid in
    5.   <foreach item="item" index="index" collection="array"
    6.       open="(" separator="," close=")">
    7.         #{item}
    8.   foreach>
    9. select>

    Dao层代码:

    1. public List selectStudentBySid(int[] list)
    2.    {}

    3:将参数封装成map的类型

     Mapper层代码

    1. <select id="selectStudentBySid" resultType="Student" >
    2.   SELECT *
    3.   FROM student
    4.   WHERE sname like "%"#{sname}"%" and sid in
    5.   <foreach item="item" index="index" collection="sids"
    6.       open="(" separator="," close=")">
    7.         #{item}
    8.   foreach>
    9. select>

    Collection的值为ids,是传入的参数map的key

    Dao层代码:

    public List selectStudentBySid(Map Object> params){ }

    测试代码:

    1. List list=new ArrayList();
    2. list.add(1);list.add(2);list.add(3);
    3. Map params=new HashMap();
    4. Params.put("sids",list);
    5. Params.put("sname",sname);

  • 相关阅读:
    java学习之SpringCloud Alibaba
    dm8备份与还原
    Fiddler抓包工具是最强大最好用的 Web 调试工具之一
    AWS EC2入门指南中创建和配置云虚拟机实例的基本步骤
    C语言实现字符串的部分匹配算法
    Excel·VBA数组排列函数
    Debian11安装PostgreSQL+PostGIS+pgRouting ,链接Navicat
    Java性能调优System的gc垃圾回收方法
    【设计模式】工厂模式(c++实现)
    最长的可整合子数组的长度
  • 原文地址:https://blog.csdn.net/daimenglaoshi/article/details/126880674