MyBatis系列(三)
关于类型处理器和resultmap
类型处理器(类型转换器)
MyBatis自带一些常见的类型处理器
也可以自定义Mybatis类型处理器
JAVA 数据类型 –数据库(数据类型)
比如:
实体类 Student :Boolean stuSex true:男 /false:女
表中Student : number stuSex 1:男 / 0:女
自定义类型转换器
假设
我要在Student表里面新建一个性别列 男生用1 表示 女生用0表示(number类型),
此时实体类中我男生用的true 女生用的false(Boolean,仅仅是举个例子)。
数据类型不匹配此时数据类型不匹配。
创建类型转换器
需要实现TypeHandler接口 此接口有一个实现类 BaseTypeHandler
因此实现转换器有两种方法 实现 接口TypeHandler 和 继承BaseTypeHandler(简单)
所以这里采用后者,去extend
this method。
准备工作
新建一个Boolean的属性 叫做stuSex 。
private Boolean stuSex
形成get set方法
转换器
新建一个转换器继承BaseTypeHandler,编译器会自动生成三个方法
1 | // get是DB数据-->java数据 |
其中,
ps:PreparedStatement对象
i:PreparedStatement对象操作的参数的位置
parameter:Java值
jdbcType:jdbc操作的数据类型
这里用到了三元运算符,想起了之前一个写个人网站用到的一个三元运算符🤦♂️(更)。
conf配置
在config中加上转换器
1 | <typeHandlers> |
这样就算是好了 测试一下
mapper配置
使用了转换器的查询
1如果类中属性和表中的字段类型都能合理识别(String-varchar2),则可以使用resultType resultType=”top.eshyee.entity.Student”
否则(boolean-integer)使用resultMap
2如果类中的属性名和表中的字段名都能够合理识别(stuNo-stuno)则可以使用resultType
否则(id-stuno)使用resultMap
1 | <select id="queryStudentBystuNumConverter" resultMap="studentResult" parameterType="int"> |
resultMap
resultMap可以实现两个功能:
1 类型转换
2 属性-字段名之间的映射关系
分为主键id和非主键result
如果实体类中的属性跟数据库中那个的字段名叫法不一样,从下面的映射关系中也可以更改 。
这样就好了,可以在test.java
中测试一下了。🥐
总结
以前用过别的方法来转换数据库数据与java数据 但是这个更系统一些吧。
希望这次不要再出个3.5了。🐷