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>
相关推荐
城管不管16 小时前
什么是Prompt?
android·java·数据库·语言模型·llm·prompt
光电的一只菜鸡17 小时前
shell脚本开发技巧
开发语言·ios·swift
AI大模型17 小时前
被AI抢饭碗的Java程序员,后来都怎样了?
java·后端·ai编程
苦逼的猿宝17 小时前
医院管理系统.(源码+论文)
java·毕业设计·springboot·计算机毕业设计
丘山望岳17 小时前
藤萝垂序——二叉搜索树
开发语言·数据结构·c++
東雪木17 小时前
JVM 与 Java 内存模型 专属复习笔记
java·jvm·笔记·java面试
爱睡觉11117 小时前
从 6500ms 到 49ms:一次 Java 内存布局优化的实录
java
惊鸿一博17 小时前
统计_滚动标准差:局部波动性衡量
开发语言·python
摇滚侠17 小时前
IDEA 新建 Java 项目 学习 Java SE
java·学习·intellij-idea
这个DBA有点耶17 小时前
数据库管理工具+开发工具的融合:AI如何重塑DBA工作流?
开发语言·数据库·人工智能·sql·云计算·dba