11.mybatis技巧 + 踩坑

本文介绍MyBatis配置文件中useGeneratedKeys参数的使用,解决主从订单保存时自动生成ID的问题,以及枚举类在项目中的应用。同时,分享了处理MySQL IN子句遇到空列表的解决方案。

1.Mybatis 配置文件 useGeneratedKeys 参数

解决了主从订单保存问题中的,保存从订单时需要先查询主订单自动生成id的步骤
在这里插入图片描述

Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键自动赋值给传入的参数对象的id属性。所以在values中可以直接用#(id)取参数自动生成的id值。
省略了查询主订单新生成id值的步骤.保存从订单时,传入的参数使用保存主订单时的参数即可,此时这个参数中已经有主订单的id属性了

注意:!!!
使用此属性后,insert返回的值依然是1或0,对象的id属性依然需要用Object.id取值!!!

2.枚举类的应用

项目中主要用枚举类存券、卡、票、影院、座位等的类型。
枚举类的名称用英文字母,第一个参数用数字,第二个参数用具体描述:
例如:

FILM(1, "影片"),
TRADER(2, "片名");

在获取枚举类时: 得到枚举类型的数组,然后用增强for循环遍历数组,用get/set方法获得枚举值

EnumCouponType[] enum = EnumCouponType.values()

3.踩坑总结

mysql的 in值 为一个空list时踩的坑

在这里插入图片描述


动态SQL范例:

一.查询

1.根据主键数组查询多行

<select id="selectByPrimaryKeyArray"
	resultType="pojo.chitai.coupon.entity.CouponAbandonCouponCode">
	SELECT
	<include refid="fields" />
	FROM `coupon_abandon_coupon_code` WHERE `id` IN
	<foreach collection="array" index="index" item="item" open="("
		separator="," close=")">
		#{item}
	</foreach>
	ORDER BY FIELD(`id`,
	<foreach collection="array" index="index" item="item"
		separator=",">
	#{item}
	</foreach>
	)
</select>

2.根据主键集合查询多行

<select id="selectByPrimaryKeys"
	resultType="pojo.chitai.coupon.entity.CouponAbandonCouponCode"
	parameterType="java.lang.Iterable">
	SELECT
	<include refid="fields" />
	FROM `coupon_abandon_coupon_code` WHERE `id` IN
	<foreach collection="list" index="index" item="item" open="("
		separator="," close=")">
		#{item}
	</foreach>
	ORDER BY FIELD(`id`,
	<foreach collection="list" index="index" item="item"
		separator=",">
		#{item}
	</foreach>
	)
</select>

更新

1.批量新增

<insert id="inserts" parameterType="common.chitai.sql.Inserts"
useGeneratedKeys="true">
	INSERT INTO `coupon_abandon`(`id`, `tenant_id`,
	`marketing_organization_id`, `code`, `name`, `reference_apply`,
	`apply_id`, `status`, `created_at`, `updated_at`, `deleted`, `created`,
	`updated`)VALUES
	<foreach collection="list" item="item" index="index"
		separator=",">
		(#{item.id}, #{item.tenantId}, #{item.marketingOrganizationId}, #{item.code},
		#{item.name}, #{item.referenceApply}, #{item.applyId}, #{item.status},
		#{item.createdAt}, #{item.updatedAt}, #{item.deleted},
		#{item.created}, #{item.updated})
	</foreach>
</insert>

2.根据主键数组批量删除

<delete id="deleteByPrimaryKeyArray">
     DELETE FROM `coupon_abandon` WHERE `id` IN
     <foreach collection="array" item="item" index="index" open="(" separator="," close=")">
    	 #{item}
     </foreach>
 </delete>

3.根据主键集合批量删除

    <delete id="deleteByPrimaryKeys" parameterType="java.lang.Iterable">
        DELETE FROM `coupon_abandon` WHERE `id` IN
        <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
        	#{item}
        </foreach>
    </delete>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值