动态SQL

动态SQL

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

SQL语句:

<select id="findUsersQuery"parameterType="usersquery"

                   resultType="usersquery">

                   select

                   *from users

                   <where>

                            <if test="users!=null">

                                     <if test="users.id!=nulland users.id=''">

                                               users.id=#{users.id}

                           </if>

                                <iftest="users.username!=null and users.username=''">

                                               users.username like'%${users.username}%'

                           </if>

                            </if>

                   </where>

         </select>

 

 

 

 

 

 

SQL片段:将上面实现的动态SQL判断代码块抽取出来,方便程序员开发。

<!-- 定义SQL片段

id:表示SQL片段的唯一标识

经验:是基于单表来定义SQL片段,这样SQL片段的可重用性才高,在SQL片段中不要包括where

 -->

<sql id="users_requirements">

                   <iftest="users!=null">

                            <iftest="users.id!=null and users.id=''">

                                     users.id=#{users.id}

                       </if>

                            <iftest="users.username!=null and users.username=''">

                                     users.usernamelike '%${users.username}%'

                       </if>

                   </if>

</sql>

 

<select id="findUsersQuery"parameterType="usersquery" resultType="usersquery">

                   Select* from users

                   <where>

                       <!-- 引用SQL片段的id,如果refid指定的id不在本mapper文件中,就在前面加上namespace-->

                     <include refid="users_requirements"></include>

                   </where>

</select>

 

 

 

 

 

 

 

Foreach:

Select *  from users where id=1 or id=2or id=3;

 

//传入多个id

private List<Integer> ids;

 

<!—使用foreach遍历传入ids

Collection:指定输入对象中集合属性

Item:每个遍历生成对象中

Open:开始遍历时拼接串

Close:结束遍历时拼接的串

Separator:遍历的两个对象中需要拼接的串

要实现下面的SQL拼接

And (id=1 or id=10 or id=16)-->

<foreach collection=”ids” item=”user_id”open=”and (” close=”)” separator=”or”>

<!—每次遍历需要拼接的串-->

Id=#{ user_id }

</foreach>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值