selectKey 这个标签主要用于Insert数据时不支持主键自动生成的问题
程序员文章站
2022-06-09 09:18:44
...
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
如果使用xml的方式进行接口映射 namespace的值必须是接口的全路径
-->
<mapper namespace="com.et.mybatis.selectKey.SqlKeyMapper">
<insert id="insertUser" parameterType="User">
<selectKey keyProperty="id" order="BEFORE" resultType="int">
<!-- selectKey 这个标签主要用于Insert数据时不支持主键自动生成的问题
如果在oracle中 应该写的SQL语句是 select 序列.nextval from dual
如果在mysql 中应该写的SQL语句是 select max(主键列)+1 from 对应表
☆ ☆ ☆ SelectKey需要注意order属性。
MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
Oracle这样取序列的情况,需要设置为before,否则会报错。
-->
select id.nextval from dual
select max(id)+1 from arcticle
</selectKey>
insert into arcticle(id,title,content,userid) values(#{id},#{title},#{content},#{userid})
</insert>
</mapper>