MyBatis —— 创建数据自动生成32位UUID主键
简介
数据表主键定义为32位UUID,插入时不想在程序中使用UUIDUtil,在My
如何处理
<insert id="insertSelective" parameterType="com.asset.disposal.entity.po.slave.AssetTableSlave">
<selectKey keyProperty="assetId" order="BEFORE" resultType="java.lang.String">
select replace(uuid(),'-','')
</selectKey>
insert into ASSET_TABLE_MASTER
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="assetId != null">
ASSET_ID,
</if>
<if test="parame1 != null">
PARAME1,
</if>
...
...
...
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="assetId != null">
#{assetId,jdbcType=VARCHAR},
</if>
<if test="parame1 != null">
#{parame1,jdbcType=VARCHAR},
</if>
<if test="parame2 != null">
#{parame2,jdbcType=VARCHAR},
</if>
...
...
...
错误
- Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains for…
Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.asset.disposal.dao.mapper.master.AssetTableMasterMapper.BaseResultMap
- 原因请看下面注释
<insert id="insertSelective" parameterType="com.asset.disposal.entity.po.slave.AssetTableSlave">
<!-- 此处assetId在xml其它位置出现,不是唯一的,需要修改keyProperty的值 -->
<selectKey keyProperty="assetId" order="BEFORE" resultType="java.lang.String">
select replace(uuid(),'-','')
</selectKey>
insert into ASSET_TABLE_MASTER
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="assetId != null">
ASSET_ID,
</if>
<if test="parame1 != null">
PARAME1,
</if>
...
...
...
- 解决
<insert id="insertSelective" parameterType="com.asset.disposal.entity.po.slave.AssetTableSlave">
<!-- 修改keyProperty的值为 assetIdVal,让assetIdVal是这个文件内唯一的 -->
<selectKey keyProperty="assetIdVal" order="BEFORE" resultType="java.lang.String">
select replace(uuid(),'-','')
</selectKey>
insert into ASSET_TABLE_MASTER
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="assetId != null">
ASSET_ID,
</if>
<if test="parame1 != null">
PARAME1,
</if>
...
...
...
<trim prefix="values (" suffix=")" suffixOverrides=",">
<!-- 赋值时,直接使用assetIdVal -->
<if test="assetIdVal != null">
#{assetIdVal,jdbcType=VARCHAR},
</if>
<if test="parame1 != null">
#{parame1,jdbcType=VARCHAR},
</if>
<if test="parame2 != null">
#{parame2,jdbcType=VARCHAR},
</if>
...
...
...