首页 > 编程知识 正文

mybatis数据类型(mybatis执行ddl)

时间:2023-05-04 16:36:30 阅读:94243 作者:850

我是气旋hpdhf的哥哥。 每天都有编程干货的共享。 如果觉得写得不错,请夸奖一下,转发一下,关注一下。

1.场景

在日常的java开发中经常有这样的需求,用0或1等代码(不限于数字)表示某个状态。 例如用0表示女性,用1表示男性。 此外,写入数据库是标识符,也可以从数据库中读取并返回具体说明。 而且,一般来说为了更好地理解或消除魔法值,通常的处理方案是定义列举:

有些列举是这样定义的

那么通常很多人都会这样入库(java伪码) )。

在读取时,也可以像上述那样再次反向处理,或者使用数据库sql语法case when直接写入DTO

这个处理方法看起来不怎么优雅。 而且增加了很多判断和处理逻辑,并不是和我们的业务非常相关。 所以我们可以选择更好的处理方法。

2.Mybatis中的TypeHandler

ORM框架使用Mybatis时。 TypeHandlerT接口可以轻松解决这个问题。

2.1 TypeHandler 分析

源代码分析:

setParameter方法用传递的t型写入自己的逻辑,选择调用PreparedStatement对象的set方法将数据写入数据库。 这个方法是用来写库的。 getresult(resultsetRS,String columnName )按字段名读取库,然后将其转换为t型。 获取结果(结果RS,整数列索引)使用字段索引读取库并将其转换为t形。 getresult(callablestatementcs,int columnIndex )调用存储过程来获取结果并将其转换为t型。

2.2 EnumOrdinalTypeHandler

我们发现TypeHandler有安装类EnumOrdinalTypeHandler。 字面意思是可以按列举的序号处理类型。

我们先不考虑setNull的情况。 该方法发现枚举的顺序值是可靠存储的。 顺序从0开始。 在上例中,GenderType.FEMALE存储为0,GenderType.MALE存储为1,而GenderType.UNKNOWN存储为2。 采取时也将自然逆处理作为具体的GenderType列举。

我们还发现

2.3 EnumTypeHandler

有其他枚举处理器。 其set方法如下。

不考虑jdbcType的问题,全部为Enum.name ) )的值写入数据库。 用上面的例子来说,如果是GenderType.FEMALE的话是FEMALE,如果是GenderType.MALE的话是MALE,但是在GenderType.UNKNOWN的时候保管的是UNKNOWN。 导入库时,在enum.valueof(classtenumtype,String name )中进行反转操作。

2.4 自定义TypeHandler

枚举类型是指,如果要使用其他方法来处理类别转换,该怎么办? 当然Mybatis不会给你做这么具体的事。 需要你自己实现。 以列举为例,模仿上面两种类型的TypeHandler。

还是拿第一个例子来说,我个人喜欢这样定义列举:

只要有通过继承BaseTypeHandler来实现这个抽象类的三个钩子方法即可:

TypeHandler实现已经写好了,但是如何使其发挥作用呢? 我们接下来下去。

如果在映射集xml配置文件(如

2.5 TypeHandler 配置

resultmap )的typeHandler属性或Sql语句占位符#{}中注册了typeHandler实现类的完全限定名称。 类型处理程序不需要前往类型处理程序

的双曲正弦值。 由于系统会自动基于类的完全限定名称实例化typeHandler,因此必须确保无参数构造函数完全正常工作。

另一个是在配置中声明TypeHandler的注册。 对于xml配置,必须在配置文件的typeHandlers标记中声明性地注册,如下所示:

如果实现类包含上述注释,则可以不声明jdbcType和javaType属性。

使用javaConfig方法时,首先可以从SqlSessionFactory对象向Configuration对象注册type处理程序。

如果使用的是mybatis-spring组件,则在SqlSessionFactoryBean的setTypeHandlersPackage方法中设置typeHandler的集中软件包路径时,将自动扫描框架

springboot的相应配置属性为mybatis.typeHandlersPackage。 这样,只需要在映射xml配置文件中声明JDBC类型和Java类型,而不需要声明特定的类型处理程序。

3.总结

今天,我们学习了在mybatis开发中使用类型处理器进行类型转换处理的方法、处理枚举的方法以及定制和使用处理器的方法。 我相信你在java开发的过程中会有很大的帮助。 ”

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。