最近在使用框架整合项目数据库的时候经常转换在oracle和mysql数据库之间转换,两者在语法上差异不大但也有一些差别,例如插入数据时。
oracle的mapper文件中:
<!--添加数据-->
<insert id="insertUser">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select user_seq.nextval from dual
</selectKey>
insert into t_user values(#{id},#{username},#{password})
</insert>
其中用户的id采用序列自动生成,参数意义:
keyProperty:值与参数对象的属性的id匹配;
resultType:返回的数据类型
order:值为before,在执行添加语句insert into 之前生成序列。
添加语句执行的过程:
1.先生成序列,并把值传递给实体对象对应的属性,这样做的原因是因为在一些实际需求中需要即时拿到生成的序列号,即id号。
2.执行添加操作。
mysql的mapper文件中:
<insert id=”insertUser”>
<selectKey keyProperty=”id” resultType=”int”order=”AFTER”>
select LAST_INSERT_ID()
</selectKey>
insert into t_user (username,password) values(#{username},#{password})
</insert>
注意的是:在mysql中的order的值为after,在mysql中id值的增长一般为自增长,auto_commit,而不是序列,它的id值的生成是在执行insert into语句之后。