
MyBatis自定义类型转换器
发布日期:2021-05-07 13:38:25
浏览次数:7
分类:原创文章
本文共 3113 字,大约阅读时间需要 10 分钟。
MyBatis虽然自身提供了很多种默认的转换机制,比如数据库中的number类型会自动转换成java的int类型,varchar/varchar2会自动转换成String…如果这些默认的类型转换依旧不能满足程序的开发,开发者就应该考虑自己去编写类型转换器!
本文以jav中的boolean转化为数据库中number为例子。(True-1,false-0)
下面讲述实现方法:
1.编写继承 BaseTypeHandler的实现类BooleanAndIntConverter(转换器类)
从数据库取数据用的下面的getXx方法,放数据到数据库中用的是setXX方法!
package converter;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;//自定义类型转化器 java:boolean -> sql:number 要么implements TypeHandler 要么...public class BooleanAndIntConverter extends BaseTypeHandler<Boolean> { //继承实现类要好写一点 //java(boolean)->db(number) /** *preparedStatement:preparedStatement对象 * i:preparedStatement对象操作参数的位置 * aBoolean:java值 * jdbcType:jdbc操作的数据库类型 */ @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException { if(aBoolean){ preparedStatement.setInt(i,1); }else{ preparedStatement.setInt(i,0); } } //db->java @Override public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException { int sexNum = resultSet.getInt(s);// if(sexNum==1)// return true;// else// return false; return sexNum == 1?true:false; } //db->java @Override public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException { int sexNum = resultSet.getInt(i); return sexNum == 1?true:false; } //db->java @Override public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException { int sexNum = callableStatement.getInt(i); return sexNum == 1?true:false; }}
2.配置Mybatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--配置转换器--> <typeHandlers> <typeHandler handler="converter.BooleanAndIntConverter" javaType="Boolean" jdbcType="INTEGER"/> </typeHandlers></configuration>
3.使用使用时要改变对应mapper.xml的方法中的返回值
使用resultMap强制改变类型:(下面只是案例,没任何实际意义)
<!--使用转换器的查询--> <select id="queryStudentByStunoWithConverter" resultMap="studentResult" parameterType="int"> select * from student3 where stuno = #{stuno} </select> <resultMap type="student3" id="studentResult"> <!--分为主键id 和 非主键 result--> <id property="stuNo" column="stuno"/> <result property="stuName" column="stuname"/> <result property="stuAge" column="stuage"/> <result property="graName" column="graname"/> <result property="stuSex" column="stusex" javaType="boolean" jdbcType="INTEGER"/> </resultMap><!--使用转换器的增加--> <insert id="addStudentWithConverter" parameterType="student3"> insert into student3(stuno,stuname,stuage,graname,stusex) values(#{stuNo},#{stuName},#{stuAge},#{graName},#{stuSex,javaType=boolean,jdbcType=INTEGER}) </insert>
至此,类型转换器就可以正常使用了。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月17日 08时48分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
YbtOJ 递推算法课堂过关 例5 平铺方案【递推(简单DP)】
2019-03-04
YbtOJ hash和hash表课堂过关 例1 字符串哈希【hash】
2019-03-04
YbtOJ hash和hash表课堂过关 例4 单词背诵【hash】【二分】
2019-03-04
CSUST 2021 周赛 2 题解
2019-03-04
【人脸识别】基于matlab GUI灰度化教室人数统计【含Matlab源码 602期】
2019-03-04
前后端数据交互之表单
2019-03-04
剑指offer JZ15 反转链表
2019-03-04
剑指offer JZ21 栈的压入弹出序列
2019-03-04
剑指offer JZ31 整数中1出现的次数
2019-03-04
实现基于scrapy框架的天气预报爬虫hengYangSpaider @572311文
2019-03-04
maven打包指定名称并去除jar-with-dependencies后缀
2019-03-04
Netty4服务端入门代码示例
2019-03-04
java连接mysql,jdbc驱动
2019-03-04
python 垃圾回收机制 以及 内存管理
2019-03-04
C++中的static成员函数以及static成员变量详解
2019-03-04
操作系统前传第六课--开发中的辅助工具
2019-03-04
Linux系统编程44 信号 - 信号的响应过程分析!!!
2019-03-04
QT17 - 对话框及其类型 QDialog
2019-03-04
设备驱动之阻塞
2019-03-04