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

被折叠的 条评论
为什么被折叠?



