SSM--MyBatis框架之动态SQL

SSM--MyBatis框架之动态SQL

文章目录

动态SQL

if+trim(一般用于增加)

prefix 给sql语句拼接的前缀

suffix 给sql语句拼接的后缀

prefixOverrides 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定

suffixOverrides 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定

xml 复制代码
<insert id="addBill" >
    insert into smbms_bill
    <trim prefix="(" suffix=")" suffixOverrides=",">
        <if test="billCode != null">billCode,</if>
        <if test="productName != null">productName,</if>
        <if test="totalPrice != null">totalPrice,</if>
        <if test="isPayment != null">isPayment</if>
    </trim>
    values
    <trim prefix="(" suffix=")" suffixOverrides=",">
        <if test="billCode != null"> #{billCode},</if>
        <if test="productName != null">#{productName},</if>
        <if test="totalPrice != null">#{totalPrice},</if>
        <if test="isPayment != null">#{isPayment}</if>
    </trim>
</insert>

if+set(用于修改)

set能够自动识别并去除多余的逗号

xml 复制代码
<update id="updateBill">
update smbms_bill
<set>
    <if test="billCode!=null">billCode = #{billCode},</if>
    <if test="productName!=null">productName = #{productName},</if>
    <if test="totalPrice!=null">totalPrice = #{totalPrice},</if>
    <if test="isPayment!=null">isPayment = #{isPayment}</if>
</set>
where id=#{id}
</update>

if+where(一般用于查询)

where标签能自动识别并去除多余的and

java 复制代码
<select id="findBillList" resultType="Bill">
    select
    	id,
        billCode,
        productName
        from smbms_bill 
    <where>
        <if test="billCode!=null">a.billCode like concat('%',#{billCode},'%')</if>
        <if test="productName!=null">and a.productName like concat('%',#{productName},'%')</if>
    </where>
</select>

foreach

List集合 collection:指定循环集合类型 list

xml 复制代码
<select id="findBillByProviderList" resultType="Bill">
    select  
        id,
        billCode,
        productName,
        productDesc
    from smbms_bill
    where providerId in
    <foreach item="id" collection="list" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>
java 复制代码
//测试类
@Test
public void findBillByProviderList() {
	billDao.findBillByProviderList(Arrays.asList(1,2,3));
}

Array数组 collection:指定循环集合类型array

xml 复制代码
<select id="findBillByProviderArray" resultType="Bill">
     select  
         id,
         billCode,
         productName,
         productDesc
         from smbms_bill
     where providerId in
     <foreach item="id" collection="array" open="(" separator="," close=")">
         #{id}
     </foreach>
</select>
java 复制代码
@Test
public void findBillByProviderArray() {
	billDao.findBillByProviderArray(new Integer[]{1,2,3});
}

Map集合 collection:指定循环集合类型 map-key

#{ map-key值}

xml 复制代码
<select id="findBillByProviderMap" resultType="Bill">
    select  
    id,
    billCode,
    productName,
    productDesc
    from smbms_bill
    where providerId in
    <foreach item="id" collection="pIds" open="(" separator="," close=")">
        #{id}
    </foreach>
    and productName like concat('%',#{productName},'%')
</select>
java 复制代码
@Test
public void findBillByProviderMap() {
    Map<String,Object> map=new HashMap<>();
    map.put("pIds",Arrays.asList(1,2,3));
    map.put("productName","米");
    billDao.findBillByProviderMap(map);
}

sql片段

对于可重用的SQL代码片段使用sql标签

include标签引用SQL片段

xml 复制代码
<select id="findBillByProviderMap" resultType="Bill">
    <include refid="selectBill"/>
    where providerId in
    <foreach item="id" collection="pIds" open="(" separator="," close=")">
        #{id}
    </foreach>
    and productName like concat('%',#{productName},'%')
</select>
<sql id="selectBill">
        select id,
               billCode,
               productName,
               productDesc
        from smbms_bill
</sql>

choose(when otherwise)

xml 复制代码
<choose>
 <when test ="条件1"> ...</when>
 <when test ="条件2"> ...</when>
 <when test ="条件3"> ...</when>
	...
 <otherwise>...</otherwise>
</choose>
相关推荐
软件黑马王子6 分钟前
14.事件中心:主要作用和原理
开发语言·前端框架·c#
azhou的代码园8 分钟前
基于RFM模型的中小型企业客户管理系统
java·人工智能·spring boot·毕业设计
君顾122 分钟前
酒吧点餐小程序系统开发实战:从架构设计到上线全流程指南
java·开发语言·酒吧
姚不倒33 分钟前
etcd 学习系列(一):从业务需求出发,理解 etcd 是什么
运维·数据库·etcd
子非鱼a39 分钟前
【WEB】[SWPU2019]Web1
java·服务器·前端
susplus42 分钟前
【linux应用软件编程】数据库sqlite3
linux·数据库·sqlite
花生了什么事o44 分钟前
自定义Spring Boot Starter全流程
java·spring boot·后端
SelectDB1 小时前
Apache Doris + Lance:让多模态数据真正进入智能驾驶与具身智能的分析闭环
数据库
似水এ᭄往昔1 小时前
【Qt】--常用控件(显示类控件)
开发语言·qt
互联网叫兽1 小时前
redis深入学习二
数据库·redis·学习