SSM--MyBatis框架之动态SQL
文章目录
- SSM--MyBatis框架之动态SQL
-
- 动态SQL
-
- if+trim(一般用于增加)
- if+set(用于修改)
- if+where(一般用于查询)
- foreach
- sql片段
- [choose(when otherwise)](#choose(when otherwise))
动态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>