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>
相关推荐
旺仔学长 哈哈12 分钟前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
ClickHouseDB29 分钟前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
霸道流氓气质31 分钟前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
wuqingshun31415936 分钟前
MyBatis 中#()和$()的区别是什么?
java
小Ti客栈43 分钟前
SpringBoot 事件发布机制:原理与应用
java·spring boot·spring
BerrySen1781 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构
数智化管理手记1 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
吴声子夜歌1 小时前
MongoDB 4.2——选择片键
数据库·mongodb
technology_x1 小时前
2026年财务报表分析软件测评:兼容与安全解析
java·服务器·前端
兰令水1 小时前
hot100【acm版】【2026.7.25/26打卡-java版本】
java·算法·排序算法