首页 > 数据库技术 > 详细

mybatis入门-动态sql

时间:2017-02-10 23:16:33      阅读:296      评论:0      收藏:0      [点我收藏+]

 什么是动态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

 

mybatis入门-动态sql

原文:http://www.cnblogs.com/liyasong/p/6388184.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!