MyBatis 类型转换器

每当MyBatis设置参数到PrepareStatement或者从ResultSet结果集中取值时,就会用到TypeHandler来处理数据库类型与Java类型之间的转换。

myBatis类型转换器适用于 Java实体类中的类型和数据库中的类型不对应时。

比如:Java实体类中有一个Boolean类型的字段flag,对应到数据库flag字段中类型是int。这时我们会使用TypeHandler来进行入库和查询的数据转换。

下图是默认的TypeHandler:

我们开始实现一下上边例子的类型转换器:

定义实体类Dept :

public class Dept {private Integer deptno;private String name;private String loc;private boolean flage;//get,set方法省略}

创建Mapper接口DeptMapper:

public interface DeptMapper {void deptSave(Dept dept);List<Dept> deptFind();
}

创建对应的Mapper文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.my.dao.DeptMapper" ><insert id="deptSave" >INSERT INTO DEPT VALUES(#{deptno},#{name},#{loc},#{flage})</insert><select id="deptFind" resultType="Dept"  >SELECT * FROM DEPT</select></mapper>

创建我们自己的类型转换类MyTypeHandler:
myBatis自定义类型转换器需要实现org.apache.ibatis.type.TypeHandler接口

public class MyTypeHandler  implements TypeHandler{/*** 执行查询后* 参数:    ResultSet rs        查询当前列数据*            String cloumnName   查询当前列名称*/public Object getResult(ResultSet rs, String cloumnName) throws SQLException {int flage = rs.getInt(cloumnName);Boolean b = Boolean.FALSE;if(flage == 1){b = Boolean.TRUE;}return b;}public Object getResult(ResultSet rs, int columnIndex) throws SQLException {// TODO Auto-generated method stubreturn null;}public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {// TODO Auto-generated method stubreturn null;}/*** 此方法是在插入是进行设置参数* 参数:    PreparedStatement *         int i               为Jdbc预编译时设置参数的索引值*      Object obj          要插入的参数值*        JdbcType jdbcType   要插入JDBC的类型*/public void setParameter(PreparedStatement ps, int i, Object obj, JdbcType jdbcType) throws SQLException {if(obj == null){ps.setInt(i, 0);}Boolean par = (Boolean)obj;if(par){ps.setInt(i, 1);}else{ps.setInt(i, 0);}}}

现在我们就需要最后一步,进行自定义类型转换器的注册(在面向接口编程中好多我们实现或者集成人家的接口或者是实现类都需要去注册,这样子程序在运行时才会知道运行的实现类是那个)。

注册类型转换器的方式有两种:
1,进行全局的注册
在核心配置文件中添加:

 <typeHandlers><typeHandler handler="com.my.util.MyTypeHandler" javaType="Boolean" jdbcType="NUMERIC" /></typeHandlers>

这种配置的作用域是全局的,也就是说所有的我们书写的Mapper中凡是满足Java类型是Boolean数据库类型是Number或者是int时(满足这个条件 javaType=“Boolean” jdbcType=“NUMERIC” ),都会执行这个MyTypeHandler。

2,局部注册
在对应的Mapper文件中添加resultMap标签:

<resultMap type="dept" id="deptMap"><result column="flage" property="flage" typeHandler="com.my.util.MyTypeHandler"  /></resultMap>

这些是今天学习的一部分内容,如果您在上述文章中发现有错误的地方欢迎您指出来我会积极去改正。

这应该是我的第一篇博客,从大学到实习之后到工作从没有写博客的念头,但是突然感觉自己工作这么长的时间中应该把自己的积累进行实化,做些看得到的东西。

MyBatis 类型转换器相关推荐

  1. mybatis类型转换器处理PostGis数据库geometry类型转换

    在入库和查询中需要自动的让geometry的类型和实体类中的类型映射. 实体类中接收参数是String类型(geoJson) PostGis中的geometry类型是十六进制的扩展WKB类型(EWKB ...

  2. Mybatis类型转换器使用

    1.mybatis类型转换器,就是Java类型与数据库的类型之间转换的一个中介,由这个转换器可以对类型进行映射,mybatis对于基础类型都有默认类型转换器,你可以自定义类型转换器替代默认的转换器,大 ...

  3. 04.MyBatis别名的设置和类型转换器

    别名的设置:(别名不区分大小写): 设置单个别名: <configuration><properties resource="db.properties" /&g ...

  4. mybatis 自定义转换规则_Mybatis使用小技巧-自定义类型转换器

    一般情况下,mybatis自带的类型转换器已经足够用了,但是需求永无止境,自定义类型转换器还是学一下吧,指不定哪天会用上. 举个没啥用的示例 javabean如下: public class User ...

  5. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler

    此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结. Mybatis实现自定义的转换器,十分的简单,其主要步骤分为三步,这里以操作XMLType类型为例. 第 ...

  6. Mybatis中的类型转换器

    无论是mybati是向数据库中存储数据还是将数据读取出来都需要涉及类型转换器. Mybatis再带的类型转换器:[部分] 自定义类型处理器 自定义类型转换器的解决方案: 重写已经有的类型转换器. 新建 ...

  7. 通过mybatis自定义参数类型转换器,进行数据库字段加密脱敏

    1 问题背景 在数据库存储人员的信息时,有一些信息是敏感数据,如身份证号.出生地等.为了防止信息泄漏,这些信息不允许直接在数据库中查看,此时就需要对这些字段进行加密存储,但在页面查看的仍旧是解密后的数 ...

  8. Mybatis特殊值Enum类型转换器-ValuedEnumTypeHandler

    引言 typeHandlers 阅读官方文档 typeHandlers 一节{:target="_blank"} MyBatis 在预处理语句(PreparedStatement) ...

  9. 使用 mybatis 自定义日期类型转换器

    文章目录 前言 一.resources 1.1 sqlMapConfig.xml 1.2 log4j.properties 1.3 userMapper.xml 二.java结构 2.1 dao 2. ...

  10. 配置信息的优化,类型转换器

    1. 优化: 可以将配置信息单独放入db.properties中,然后再动态引入 db.properties:k=v <configuration> <properties reso ...

最新文章

  1. yii添加模型基础类
  2. 关于Dapper实现读写分离的个人思考
  3. C++ primer 第13章 拷贝控制
  4. 装13失败后,我决定使用Python为生僻字批量注音
  5. 基于Spring Security的认证方式_SpringBoot认识_Spring Security OAuth2.0认证授权---springcloud工作笔记121
  6. 基于Linux下的英英词典
  7. 前端vue经典面试题78道(重点详细简洁)
  8. Oracle或关闭中国研发中心,裁员1600 人
  9. 奇点云数据中台技术汇(九)| 如何建设数据安全体系?
  10. 手机免费使用PDF编辑器一键支持PDF转Word,随时随地处理文档
  11. JSD-2204-JavaScript-Vue-Day05
  12. HTML+CSS一个简单的电影网页制作作业,学生个人html静态网页制作成品代码, html电影速递网
  13. CAD二次开发——填充
  14. 网页设计HTML和css(1)
  15. SP,Substance painter
  16. magento会员邮件找回密码连接无效
  17. unity3d 直接播放mp3
  18. 实现iconfont图标渐变
  19. AP微积分内容是什么?
  20. kafka副本机制学习

热门文章

  1. oracle查询导致 gc等待,RAC等待事件:gc buffer busy acquire
  2. Eclipse与JDK多版本兼容性设置
  3. shell脚本 插队
  4. 知识分享:数据分析的6大基本步骤
  5. alot英文怎么读_alot of是什么意思
  6. 如何把设计稿转换成html,将设计稿转换成WEB页面职业者
  7. iphone 6 设置自定义铃声(未越狱)
  8. jQuery fadeIn淡入效果
  9. Centos配置Web Proxy(nginx)
  10. 渥太华大学OU-iti1120 Assignment 1课业解析