您的位置:首页 > 其它

mybatis执行insert语句,如何返回主键给对象的问题(限主键为整数类型)

2017-12-14 16:23 483 查看
大体总结有两个方法:

一、如果数据库指定了主键自增长:

1、在实体类的映射文件 "*Mapper.xml" 文件中:

<insert id="insert" parameterType="com.go.model.User">
  <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
    SELECT LAST_INSERT_ID()
  </selectKey>
  insert into user(userName,password,comment)values(#{userName},#{password},#{comment})
</insert>


注释:

<insert></insert>中没有resultType属性,但<selectKey></selectKey> 标签是有的,

order="AFTER" 表示先执行插入语句,再执行查询语句

(可设置为 BEFORE 或 AFTER:

如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。
如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,

可以在插入语句中嵌入序列调用keyProperty="userId"  表示将自增长后的Id赋值给实体类中的userId字段)

SELECT LAST_INSERT_ID() 表示MySQL语法中查询出刚刚插入的记录自增长Id

注意:User实体类中 id 要有 getter() and setter() 方法

二:如果数据库没有指定主键自增长:

1、在实体类的映射文件 "*Mapper.xml" 文件中:

<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.go.model.User">
insert into user(userName,password,comment)values(#{userName},#{password},#{comment})
</insert>
注释:

<insert></insert> 中没有resultType属性,不要乱加

useGeneratedKeys="true" 表示给主键设置自增长

keyProperty="userId"  表示将自增长后的Id赋值给实体类中的userId字段

parameterType="com.go.model.User" 这个属性指向传递的参数实体类

注意:User实体类中 id 要有 getter() and setter() 方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: