Mybatis之序列插入语句(Mysql和Oracle)

在使用mybatis根据ID自增长插入语句问题?

在mybatis核心配置文件中解决

MYSQL解决办法:

<!-- 	public void addDept(Dept dept);
			mysql支持自增主键;自增主键的获取,mybatis也是利用statement.getGeneratedKeys()
			要想前台获取添加的数字,添加两个属性
			useGeneratedKeys="true": 使用自增主键获取主键值
			keyProperty: 对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
	 -->
	<insert id="addDept" useGeneratedKeys="true" keyProperty="deptno" databaseId="mysql" >
		insert into dept(dname,loc) values (#{dname},#{loc});
	</insert>

Oracle解决办法:

<!--Oracle不支持	自增;Oracle使用序列序列来模拟自增;
		每次插入的数据的主键是从序列中拿到的值:如歌获取到这个值?	
	 -->
	 <insert id="addDept" databaseId="oracle" >
	 	<!-- keyProperty:查出的主键封装给JavaBean的哪个属性 
	 		 order="BEFORE":当前SQL在插入之前运行
	 		 		AFTER:当前SQL在插入之后运行
	 		 resultType: 查出数据的返回值类型
	 		 
	 		 BEFORE运行顺序:
	 		 	先运行selectKey查询id的sql;查出id的值封装给javaBean的id属性
	 		 	再运行插入的SQL;就可以取出id属性对应的值
	 		 AFTER:
	 			先 运行插入的SQL(从序列中取出新值作为id)
	 		 	再运行selectKey查询id的sql
	 	-->
	 	<selectKey keyProperty="deptno" order="BEFORE" resultType="Integer">
	 		<!-- 编写查询主键的SQL语句 -->
		 	<!-- BEFORE:-->
				SELECT seq_deptno.nextval FROM dual
			<!-- AFTER:	 
				SELECT seq_deptno.currval FROM dual
			 -->
	 	</selectKey>
	 		<!-- 插入时的主键是从序列中拿到的 -->
			<!-- BEFORE: -->
				insert into dept(deptno,dname,loc) 
				values (#{deptno},#{dname},#{loc})
			<!-- AFTER:	
				insert into dept(deptno,dname,loc) 
				values (seq_deptno.nextval,#{dname},#{loc})
			-->
	</insert>
	 



猜你喜欢

转载自blog.csdn.net/love_moon821/article/details/78784651
今日推荐