有些时候注解可能依赖某些规则,比如取消user表的递增规则,而将其规则改为:
当用户表为空时,id设置为1
当用户表不为空时,id设置为当前最大id加3
mybatis对这样的场景也提供了支持,它主要依赖于selectKey元素
<insert id="addUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">
<selectKey keyProperty="id" resultType="long" order="BEFORE">
select if(max(id) = null, 1, max(id)+3) from user
</selectKey>
insert into user(id, name, age) values(#{id}, #{name}, #{age})
</insert>
它的keyProperty指定了采用哪个属性作为POJO的主键。resultType告诉Mybatis将返回一个long型的结果集,而Order设置成before,说明它将于当前设置的SQL前执行。
注意:插入语句中一定也要将id插入表中,否则主键生成规则不会生效