1 mybatis常用符号
承灿 2023/4/6
# 1 mybatis常用符号
特殊字符 替代符号
& &
< <
> >
" "
' '
小于等于 a<=b a <= b a <![CDATA[<= ]]>b
大于等于 a>=b a >= b a <![CDATA[>= ]]>b
不等于 a!=b a <![CDATA[ <> ]]>b a <![CDATA[!= ]]>b
# 1 有则update - 无则insert
使用这个必须要有主键 ON DUPLICATE KEY UPDATE
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=4
# 1.1 简单使用
insert into `enterprise_rectification_details`
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
`id`,
</if>
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=BIGINT},
</if>
</trim>
on duplicate key update
<trim suffixOverrides=",">
<if test="id != null">
`id` = #{id,jdbcType=BIGINT},
</if>
</trim>
</insert>
# 1.2 list集合的情况下使用mybatis配合ON DUPLICATE KEY UPDATE
<insert id="insertOrUpdateCameraInfoByBatch" parameterType="java.util.List">
insert into camera_info(
zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4Name,
cameraId
)VALUES
<foreach collection ="list" item="cameraInfo" index= "index" separator =",">
(
#{cameraInfo.zone1Id}, #{cameraInfo.zone1Name}, #{cameraInfo.zone2Id},
#{cameraInfo.zone2Name}, #{cameraInfo.zone3Id}, #{cameraInfo.zone3Name},
#{cameraInfo.zone4Id}, #{cameraInfo.zone4Name},
#{cameraInfo.cameraId},
)
</foreach>
ON DUPLICATE KEY UPDATE
car_icon_id=values(carIconId), car_alias=values(carAlias)
</insert>
# 2 坑
# mapper
两种情况
void relevantEmission(Map param);
void relevantEmission(@Param("param") Map param);//这种会报错,xml找不到
# xml
<insert id="relevantEmission" parameterType="java.util.Map">
insert into carbon_module_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
`id`,
</if>
<if test="emissionName != null">
`emission_name`,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id},
</if>
<if test="emissionName != null">
#{emissionName},
</if>
</trim>
</insert>
# 3 手动拼接SQL循环插入
<insert id="saveBatch” parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=",">
(#(item.a), #(item.b),#litem.c, #item.d), #/item.el, #(item.f), #item.gh, #item.h), #/item.i), #(item.j), #(item.k)
</foreach>
</insert>
# 4 判断是否存在返回Boolean
<select id="isQuoteAccountingBoundary" resultType="java.lang.Boolean">
SELECT CASE WHEN COUNT(1) > 0 THEN true ELSE false END AS isQuote
FROM carbon_calculate_task
WHERE accounting_boundary_id = #{id}
</select>
# 5 where in
<if test="ids != null and !ids.empty">
AND id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</if>