zoukankan      html  css  js  c++  java
  • mybatis入门-动态sql

     什么是动态sql

      判断的动态sql

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

        现有需求如下:需要查询用户,输入的是用户类,如果用户的性别类不为空,则将性别作为查询条件之一,如果用户的姓名不为空,则将用户姓名作为查询条件之一。如果用户两个属性都为空,则查询所有用户。

        我们知道,在mapper中,我们的传入参数只有一个,多个参数只能通过包转类来实现,现在这种问题怎么解决呢?答案就是在xml文件中加入判断,使sql语句动态生成。刚才的需求所对应的mapper.xml文件代码如下:

        

        sql片段

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

        定义一个sql片段

        

        引用一个sql片段

        

      foreach

        在我们的sql语句中,有时候会出现这种情况:

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

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

        我们要用foreach来解决这个问题,代码如下:

        

     1 <sql id="query_user_where">
     2         <if test="userCustom!=null">
     3             <if test="ids!=null">
     4             <!-- 使用 foreach遍历传入ids
     5             collection:指定输入 对象中集合属性
     6             item:每个遍历生成对象中
     7             open:开始遍历时拼接的串
     8             close:结束遍历时拼接的串
     9             separator:遍历的两个对象中需要拼接的串
    10              -->
    11              <!-- 使用实现下边的sql拼接:
    12               AND (id=1 OR id=10 OR id=16) 
    13               -->
    14             <foreach collection="ids" item="user_id" open="AND (" close=")" separator="or">
    15                 <!-- 每个遍历需要拼接的串 -->
    16                 id=#{user_id}
    17             </foreach>
    18             
    19             <!-- 实现  “ and id IN(1,10,16)”拼接 -->
    20             <!-- <foreach collection="ids" item="user_id" open="and id IN(" close=")" separator=",">
    21                 每个遍历需要拼接的串
    22                 #{user_id}
    23             </foreach> -->
    24             
    25             </if>
    26         </if>
    27     </sql>
    View Code
  • 相关阅读:
    后端Golang+前端React架构开发案例
    Vim技巧大全
    Draggable Modal dialog in Bootstrap
    Github.com的镜像站
    kettle之excel上传数据库
    自定义函数之分割函数
    jmeter 压测 ActiveMq 消息队列
    SQL---查找+删除重复记录
    异常值检测(Outlier Detection)
    使用u盘在pc上安装centos7(安装停留在dracut:/#的处理)
  • 原文地址:https://www.cnblogs.com/liyasong/p/6388184.html
Copyright © 2011-2022 走看看