Mybatis-自定义类型处理器
类型转换器: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-自定义类型处理器相关推荐
- MyBatis自定义类型处理器(typeHandler)
MyBatis自定义类型处理器(typeHandler) 我们执行sql语句通过PreparedStatement语句实现,PreparedStatement会设置?值,类型处理器帮PreparedS ...
- MyBatis自定义类型处理器 TypeHandler
在项目开发中经常会遇到一个问题: 当我们在javabean中自定义了枚举类型或者其它某个类型,但是在数据库中存储时往往需要转换成数据库对应的类型,并且在从数据库中取出来时也需要将数据库类型转换为jav ...
- MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)
MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...
- 【Mybatis】类型处理器TypeHandler的作用与自定义
一.什么是类型处理器 1.类型处理器(TypeHandler) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合 ...
- 在mybatis里如何自定义类型处理器
类型处理器(typeHandlers) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Jav ...
- 自定义类型处理器的应用
问题描述: 一个JSON字符串在转对象的时候报JSON解析异常的错误,我仔细看了一下错误堆栈,是枚举导致的数组越界问题. [{"fee":0,"amount": ...
- MyBatis之类型处理器typeHandlers
typeHandlers类型处理器 实现java类型与数据库类型之间的转换,可以使用系统提供的类型处理器,也可以自定义类型处理器,这里介绍的是实现自定义类型处理器处理数据库类型与java类型的转换 比 ...
- Mybatis自定义类型映射处理器
目录 前言 运行环境 创建表 导入依赖 创建实体 建立TypeHandler @MappedJdbcTypes和@MappedTypes干什么用的 BaseTypeHandler要实现的方法是干什么的 ...
- mybatis TypeHandler 类型处理器
目录 1. 自定义日期类型处理器 2. 配置自定义日期处理器 3. 新增,查询 1. 自定义日期类型处理器 继承mybatis提供的BaseTypeHandler覆写方法, 来转换Java和数据库中的 ...
- MyBatis的类型处理器
类型处理器(类型转换器) 1.MyBatis自带一些常见的类型处理器 int - number String - varchar() 2.自定义MyBatis类型处理器 java - 数据库(jdbc ...
最新文章
- docker privileged作用_docker总结
- Linux环境变量配置【转】
- 一、目标检测入门VOC2012
- Remoting技术
- 【Multisim仿真】数字电路仿真16路往复流水灯
- windows server2012 r2增加内网ip
- syn重发_SYN***原理及处理
- strconv,strings的学习(三)
- Java实现发邮件功能
- 10个你可能不曾用过却很有用的 LINUX 命令
- c语言进阶编程 培训,大学C语言进阶编程实例.doc
- 简单人物画像_怎样把复杂的人物肖像画简单化
- 【论文推荐】了解《点云补全》必看的6篇论文(附打包下载地址)
- R语言爬虫豆瓣高评分电影(喝最烈的酒,熬最深的夜,吃最好的胃药,敷最贵的面膜)
- AI驱动制药的一种典范模式
- 计算机专业考MBA有优势吗,工作后考mba有什么好处
- [JS 文件编译错误] 以下文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理。ec-canvas/echarts.js
- 大型超市管理中的条码技术应用
- 系统架构师考试需求大纲
- JavaScript双层循环
热门文章
- 最常见的HTTP错误
- android 连接 asp.net webservice 简单记录
- [转]多级配方处理的简洁方式
- 精确计算代码执行时间
- 北京师范大学网络教育期末考试计算机,北京师范大学网络教育———《计算机应用基础》第二章同步练习题(4)...
- glib 2.0 arm linux,为ARM编译Glib
- Linux下运行纯dos软件,在linux下运行dos软件(转)
- java nio 堆外内存_Java堆外内存之突破JVM枷锁
- 炼油机出来的什么油_办一个废轮胎炼油设备厂有哪些注意事项
- i219v linux,I219V高传播延迟