您的位置:首页 > 其它

MyBatis插入后主键回填

2017-04-14 17:58 666 查看

如果数据库是支持自增量的(MySQL或者SQLServer,,如果oracle有一个触发器自动添加主键也可以!!!):

假如有个实体类author

<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType=”book”>
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
</insert>


那么在插入时传入的这个author对象的id会被赋值为这行数据的id

keyProperty
,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中

useGeneratedKeys
,这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段

oracle如果有一个触发器自动添加主键也可以!!!

),默认值:false。

下面给出几个方法:

①在没有给这个表的主键设置触发器的情况下(没有主键触发器):

<insert id="insertBook1" parameterType="book">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select sq_xulie.nextval from dual
</selectKey>
insert into book (id,title)values(#{id},#{title})
</insert>


分析:

1.
<selectKey>
标签中的语句会先被执行,

2. select语句把查询到的id放入book对象中

3. 再执行下面的insert语句,这样取id的时候就有值了

②如果这个表的主键有设置触发器或者是自增量:

<insert id="insertBook" useGeneratedKeys="true" keyColumn="id" keyProperty="id" parameterType="book">
insert into book (title)values(#{title})
</insert>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis