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
  • 相关阅读:
    flask基础之请求处理核心机制(五)
    flask基础之app初始化(四)
    python内置模块之itertools
    python基础之命名空间
    python进阶之类常用魔法方法和魔法属性
    python进阶之函数和类内建魔法属性
    mysql笔记一——安装和设置root密码
    centos7环境安装rabbitMQ
    查询数据库锁
    [转]低成本搭建谷歌镜像
  • 原文地址:https://www.cnblogs.com/liyasong/p/6388184.html
Copyright © 2011-2022 走看看