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>
相关推荐
倔强的石头_几秒前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
唐青枫几秒前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
云技纵横33 分钟前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
一个做软件开发的牛马1 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261351 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
冬奇Lab13 小时前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
用户35218024547517 小时前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜20 小时前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫20 小时前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java