一、主键回填
主键回填,JDBC中的Statement对象在执行插入的SQL后,可以通过getGennerateKeys方法获得数据库生成的主键(需要数据库驱动支持),还要配置其属性keyProperty或keyColumn,告诉系统把生成的组件放入哪个属性中。
<insert id="insertRole" parameterType="Role" useGeneratedKeys="true" keyProperty="roleId">
INSERT INTO role(ROLE_NAME,ROLE_DESC) VALUES(#{roleName},#{roleDesc})
</insert>
- useGenneratedKeys = “true”
- keyProperty=“roleId” 告诉Mybatis把生成的主键放入哪个属性当中
二、自定义主键
selectKey主要用于主键暂不支持自动增加的表
- keyProperty:将Pojo类定义的哪个属性设置为主键
- order:何时生成这条SQL语句,BEFORE为在当前定义的SQL之前执行
- resultType,告诉myBatis返回什么类型的结果集
<insert id="insertRole" parameterType="Role">
<selectKey keyProperty="roleId" order="BEFORE" resultType="int">
select if (max(ID)=null,1,max(ID)+3) from role
</selectKey>
INSERT INTO role(ID,ROLE_NAME,ROLE_DESC) VALUES(#{roleId},#{roleName},#{roleDesc})
</insert>
以上配置表示:
- 当角色表为空时,将id设为1
- 当角色记录表不为空时,id设置为当前id加3
在测试时,当角色表的记录为空时,运行程序报错,原因没找到