mysql支持主键的自增
useGeneratedKeys=="true"使用自增主键获取主键值策略
keyProperty:指定对应的主键值,也就是mybatis获取到主键值后,将这个值封装给java bean的某个属性。
<!-- parameterType可以省略不写 -->
<insert id="addEmploy" parameterType="com.atChina.bean.Employee"
useGeneratedKeys="true" keyProperty="id">
insert into DEPTTEST(deptno, dname, loc) values(#{deptno}, #{dname}, #{loc})
</insert>
Oracle不支持主键的自增,但使用序列来模拟自增
oracle每次插入数据的主键是从序列中拿到的值
oracle有这样的一个序列
BEFORE运行顺序:
<!-- parameterType可以省略不写 -->
<insert id="addEmploy" parameterType="com.atChina.bean.Employee">
<!-- keyProperty: 查出的主键值封装给java bean的某个属性
order="BEFORE": 当前sql在插入sql之前运行
AFTER: 当前sql在插入sql之后运行
resultType: 查出的数据的返回值类型
BEFORE运行顺序:
先运行selectKey查询id的sql,查出id值封装给javaBean的id属性
再运行插入的sql,就可以取出id属性对应的值
-->
<selectKey keyProperty="id" resultType="Integer" order="BEFORE">
select SEQU_DEPTTEST.nextval from dual
</selectKey>
insert into DEPTTEST(id, deptno, dname, loc) values(#{id}, #{deptno}, #{dname}, #{loc})
</insert>
AFTER运行顺序:
<insert id="addEmploy" parameterType="com.atChina.bean.Employee">
<!-- keyProperty: 查出的主键值封装给java bean的某个属性
order="BEFORE": 当前sql在插入sql之前运行
AFTER: 当前sql在插入sql之后运行
resultType: 查出的数据的返回值类型
AFTER运行顺序:
先运行插入的sql, 从序列中取出新值作为id
再运行selectKey查询id的sql
-->
<selectKey keyProperty="id" resultType="Integer" order="AFTER">
select SEQU_DEPTTEST.currval from dual
</selectKey>
insert into DEPTTEST(id, deptno, dname, loc) values(SEQU_DEPTTEST.nextval, #{deptno}, #{dname}, #{loc})
</insert>