MyBatis中不同数据库的差异
发布日期:2021-05-07 13:38:27 浏览次数:16 分类:技术文章

本文共 1377 字,大约阅读时间需要 4 分钟。

下面有这样一个场景:

数据库的某些字段是自增产生的(比如说mysql,他就有自增的功能)

我在插入数据的时候就没插入自增的那一段数据,但在插入数据后,我想看看自增的这条数据是什么(回写操作),下面我们通过这个问题进行分别讲述:
mysql支持自增
只需要配置两个属性即可:
useGeneratedKeys=“true” keyProperty="stuNo"
KeyProperty指定自增的字段!

insert into student(stuName,stuAge,graName) values(#{stuName},#{stuAge},#{graName})

oracle数据库通过序列实现自增,想要实现回写功能,请看下面:

create sequence myseq		increment by 1 		start with 1;

方式一:before(推荐)

通过 的字标签 实现:
在 中查询下一个序列(自增后的值),再将此值传入keyProperty="stuNo"属性,最后在真正执行时 使用该属性值。

select myseq.nextval from dual
insert into student(stuno,stuName,stuAge,graName) values(#{stuNo} , #{stuName},#{stuAge},#{graName})

方式二:after

select myseq.currval from dual
insert into student(stuno,stuName,stuAge,graName) values(myseq.nextval , #{stuName},#{stuAge},#{graName})

处理NULL值

oracle: 如果插入的字段是Null, 提示错误: Other 而不是null

mysql:如果插入的字段是Null, 可以正常执行(没有约束)
原因:
各个数据库 在mybatis中 对各种数据类型的 默认值不一致。
mybatis中,jdbcTypeForNull(如果是null) ,则默认值OTHER。Other来说,MySQL能够处理(NULL),但是Oracle不行。
解决:
oracle: null ->OTHER ,需要手工告诉oracle :other ->null
a.修改具体的sql标签
当 某个数据类型oracle无法处理时,告诉它用默认值null;注意,此时设置的jdbcType=NULL不会影响正常的赋值(“zs”)

insert into student(stuno,stuName) values(#{stuNo} , #{stuName,jdbcType=NULL})

b.配置 mybatis全局配置文件conf.xml

上一篇:MyBatis插件开发基础
下一篇:MyBatis环境切换问题

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月22日 12时00分17秒