mybaits五:主键的自增

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有这样的一个序列mybaits五:主键的自增

 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>