类型转换器:mybatis中有一些常用的类型转换器,比如把Java中的short类型转换为mysql中的short类型;但是如果现在是Java中的Date类型,但是我想要存储到数据库中转换为Long类型的毫秒值(默认1970-00-00-00至今),就需要自己定义转换器

1.创建实体类User

public class User {private int id;private String username;private String password;private Date birthday;public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", birthday=" + birthday +'}';}
}

2.编写UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hao.mapper.UserMapper"><insert id="save" parameterType="user">insert into user values(#{id},#{username},#{password},#{birthday})</insert>
</mapper>

3.编写SqlMapConfig.xml文件

<?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>
<!--    加载jdbc.properties配置文件--><properties resource="jdbc.properties"/><!--    定义别名--><typeAliases><typeAlias type="com.hao.domain.User" alias="user"/></typeAliases><!--    注册类型处理器--><typeHandlers><typeHandler handler="com.hao.handler.DateTypeHandler"/></typeHandlers><!--    配置数据源环境--><environments default="development"><!-- 表示默认情况下使用id为development的环境--><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--    加载映射文件--><mappers><mapper resource="com/hao/mapper/UserMapper.xml"/></mappers>
</configuration>

4.自定义类型处理器(必须实现BaseTypeHandler类,泛型中的Date就是要转换的Java类型),实现其中的四个方法

public class DateTypeHandler extends BaseTypeHandler<Date> {//将java类型转换为数据库需要的类型@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {long time = date.getTime();preparedStatement.setLong(i,time);}//将数据库中的类型转化为Java类型//String:要转换的字段的名称//ResultSet:查询的结果集@Overridepublic Date getNullableResult(ResultSet resultSet, String s) throws SQLException {//获取结果集中需要的数据(long)转换成Date类型long aLong = resultSet.getLong(s);Date date = new Date(aLong);return date;}@Overridepublic Date getNullableResult(ResultSet resultSet, int i) throws SQLException {long aLong = resultSet.getLong(i);Date date = new Date(aLong);return date;}@Overridepublic Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {long aLong = callableStatement.getLong(i);Date date = new Date(aLong);return date;}
}

5.测试

public class MapperTest {@Testpublic void test1() throws IOException {InputStream stream = Resources.getResourceAsStream("SqlMapConfig.xml");SqlSession sqlSession = new SqlSessionFactoryBuilder().build(stream).openSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("ceshi");user.setPassword("abc");user.setDate(new Date());//执行保存mapper.save(user);sqlSession.commit();}
}

6.结果


7.从数据库中读取出来
在UserMapper中添加查询sql语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hao.mapper.UserMapper"><insert id="save" parameterType="user">insert into user values(#{id},#{username},#{password},#{date})</insert><select id="findById" parameterType="int" resultType="user">select * from user where id=#{id}</select>
</mapper>

8.测试

public class MapperTest {@Testpublic void test1() throws IOException {InputStream stream = Resources.getResourceAsStream("SqlMapConfig.xml");SqlSession sqlSession = new SqlSessionFactoryBuilder().build(stream).openSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.findById(8);System.out.println(user.getBirthday());}
}

9.结果

Mybatis-自定义类型处理器相关推荐

  1. MyBatis自定义类型处理器(typeHandler)

    MyBatis自定义类型处理器(typeHandler) 我们执行sql语句通过PreparedStatement语句实现,PreparedStatement会设置?值,类型处理器帮PreparedS ...

  2. MyBatis自定义类型处理器 TypeHandler

    在项目开发中经常会遇到一个问题: 当我们在javabean中自定义了枚举类型或者其它某个类型,但是在数据库中存储时往往需要转换成数据库对应的类型,并且在从数据库中取出来时也需要将数据库类型转换为jav ...

  3. MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)

    MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...

  4. 【Mybatis】类型处理器TypeHandler的作用与自定义

    一.什么是类型处理器 1.类型处理器(TypeHandler) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合 ...

  5. 在mybatis里如何自定义类型处理器

    类型处理器(typeHandlers) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Jav ...

  6. 自定义类型处理器的应用

    问题描述: 一个JSON字符串在转对象的时候报JSON解析异常的错误,我仔细看了一下错误堆栈,是枚举导致的数组越界问题. [{"fee":0,"amount": ...

  7. MyBatis之类型处理器typeHandlers

    typeHandlers类型处理器 实现java类型与数据库类型之间的转换,可以使用系统提供的类型处理器,也可以自定义类型处理器,这里介绍的是实现自定义类型处理器处理数据库类型与java类型的转换 比 ...

  8. Mybatis自定义类型映射处理器

    目录 前言 运行环境 创建表 导入依赖 创建实体 建立TypeHandler @MappedJdbcTypes和@MappedTypes干什么用的 BaseTypeHandler要实现的方法是干什么的 ...

  9. mybatis TypeHandler 类型处理器

    目录 1. 自定义日期类型处理器 2. 配置自定义日期处理器 3. 新增,查询 1. 自定义日期类型处理器 继承mybatis提供的BaseTypeHandler覆写方法, 来转换Java和数据库中的 ...

  10. MyBatis的类型处理器

    类型处理器(类型转换器) 1.MyBatis自带一些常见的类型处理器 int - number String - varchar() 2.自定义MyBatis类型处理器 java - 数据库(jdbc ...

最新文章

  1. docker privileged作用_docker总结
  2. Linux环境变量配置【转】
  3. 一、目标检测入门VOC2012
  4. Remoting技术
  5. 【Multisim仿真】数字电路仿真16路往复流水灯
  6. windows server2012 r2增加内网ip
  7. syn重发_SYN***原理及处理
  8. strconv,strings的学习(三)
  9. Java实现发邮件功能
  10. 10个你可能不曾用过却很有用的 LINUX 命令
  11. c语言进阶编程 培训,大学C语言进阶编程实例.doc
  12. 简单人物画像_怎样把复杂的人物肖像画简单化
  13. 【论文推荐】了解《点云补全》必看的6篇论文(附打包下载地址)
  14. R语言爬虫豆瓣高评分电影(喝最烈的酒,熬最深的夜,吃最好的胃药,敷最贵的面膜)
  15. AI驱动制药的一种典范模式
  16. 计算机专业考MBA有优势吗,工作后考mba有什么好处
  17. [JS 文件编译错误] 以下文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理。ec-canvas/echarts.js
  18. 大型超市管理中的条码技术应用
  19. 系统架构师考试需求大纲
  20. JavaScript双层循环

热门文章

  1. 最常见的HTTP错误
  2. android 连接 asp.net webservice 简单记录
  3. [转]多级配方处理的简洁方式
  4. 精确计算代码执行时间
  5. 北京师范大学网络教育期末考试计算机,北京师范大学网络教育———《计算机应用基础》第二章同步练习题(4)...
  6. glib 2.0 arm linux,为ARM编译Glib
  7. Linux下运行纯dos软件,在linux下运行dos软件(转)
  8. java nio 堆外内存_Java堆外内存之突破JVM枷锁
  9. 炼油机出来的什么油_办一个废轮胎炼油设备厂有哪些注意事项
  10. i219v linux,I219V高传播延迟