博客
关于我
MyBatis自定义类型转换器
阅读量:336 次
发布时间:2019-03-04

本文共 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>

至此,类型转换器就可以正常使用了。

转载地址:http://dfhe.baihongyu.com/

你可能感兴趣的文章
Java中如何构建树结构
查看>>
若依启动流程
查看>>
解决vue部署到nginx后刷新404
查看>>
解决eclipse字体背景变红或者变绿的问题
查看>>
一个面试大牛的经历
查看>>
扫雷小游戏——简单易懂
查看>>
将ip地址用整形保存
查看>>
软件架构-zookeeper快速入门
查看>>
软件架构-zookeeper场景和实现
查看>>
「初级篇」跟我一起学docker(四)--容器的基本操作
查看>>
22 岁毕业做程序员的「普通」人,50 岁时的人生轨迹是怎样的?
查看>>
『高级篇』docker之安全认证kubernetes命令熟悉(40)
查看>>
scala上界与下界、协变与逆变
查看>>
java稀疏数组
查看>>
springboot解决前后端交互跨域问题
查看>>
全球数字货币加快研发
查看>>
数字化助力金融科技,实现产业良性循环
查看>>
2020-11-18(失败的一天)
查看>>
2020-11-23(彻底理解KMP)
查看>>
DMB DSB ISB 简介
查看>>