文章目录

  • 前言
  • 一、resources
    • 1.1 sqlMapConfig.xml
    • 1.2 log4j.properties
    • 1.3 userMapper.xml
  • 二、java结构
    • 2.1 dao
    • 2.2 handler
    • 2.3 pojo
    • 2.4 service
  • 三 数据表结构及测试

前言

使用mybatis中的typeHandlers 实现自定义日期类型的转换器。
重点在2.2 handler中


一、resources

1.1 sqlMapConfig.xml

  1. typeHandlers: 自定义的日期类型转换器:
    (1)将日期类型转为long的长整型存入数据库中。
    (2)将数据库中的bigint(本质对应java的long类型)转为date类型。
  2. environments:加载数据库
  3. mapper: 映射文件的位置
<?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="com.mytest.handler.DateTypeHandler"></typeHandler></typeHandlers><environments default="dev"><environment id="dev"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com.mytest.mapper/UserMapper.xml"></mapper></mappers>
</configuration>

1.2 log4j.properties

打印日志

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###log4j.rootLogger=debug, stdout

1.3 userMapper.xml

  1. findByid: 通过id查询插入元素
  2. save: xml映射器mapper时,
    useGeneratedKeys:值为true 并分别指定属性:
    keyProperty: 对应的Java对象的主键属性
    keyColumn: 对应的数据库记录主键字段
<?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.mytest.dao.UserMapper">
<!--    通过id查询插入元素--><select id="findByid" parameterType="int" resultType="com.mytest.pojo.User">select * from sys_user where id=#{id}</select><!--    插入元素--><insert id="save" parameterType="com.mytest.pojo.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id">insert into sys_user(id,username,email,password,phoneNum,birthday) values(null,#{username},null,#{password},null,#{birthday})</insert>
</mapper>

二、java结构

2.1 dao

UserMapper

  1. findByid: 使用id值查询User
  2. save: 插入User到数据库中
package com.mytest.dao;import com.mytest.pojo.User;import java.util.List;public interface UserMapper {User findByid(int id);public void save(User user);
}

2.2 handler

DateTypeHandler

  1. setNonNullParameter:将java类型 转换成 数据库需要的类型
  2. getNullableResult:将数据库中类型 转换成java类型
package com.mytest.handler;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;
import java.util.Date;public class DateTypeHandler extends BaseTypeHandler<Date> {//将java类型 转换成 数据库需要的类型public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {long time = date.getTime();preparedStatement.setLong(i,time);}//将数据库中类型 转换成java类型//String参数  要转换的字段名称//ResultSet 查询出的结果集public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {//获得结果集中需要的数据(long) 转换成Date类型 返回long aLong = resultSet.getLong(s);Date date = new Date(aLong);return date;}//将数据库中类型 转换成java类型public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {long aLong = resultSet.getLong(i);Date date = new Date(aLong);return date;}//将数据库中类型 转换成java类型public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {long aLong = callableStatement.getLong(i);Date date = new Date(aLong);return date;}
}

2.3 pojo

package com.mytest.pojo;import java.util.Date;public class User {private Integer id;private String username;private String password;private Date birthday;public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", birthday=" + birthday +'}';}public Integer getId() {return id;}public void setId(Integer 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;}
}

2.4 service

service没用进行实现,在本demo中只用于测试使用。
sqlSession.commit()用于mybatis的事务提交。mybatis的事务默认是不提交的,故在增删改中需要进行事务的提交,在mybatis中事务的提交方式一般有两种:
1 sqlSession.commit()
2 采用openSession(true),即可实现自动提交,无需调用commit()方法。

package com.mytest.service;import com.mytest.dao.UserMapper;
import com.mytest.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;public class ServiceTest {public static void main(String[] args) throws IOException {InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) new SqlSessionFactoryBuilder().build(inputStream);//openSession为true则自动提交事务SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();//插入不需要设置id值
//        user.setId(5);user.setUsername("wangwu");user.setPassword("123");user.setBirthday(new Date());//会返回属性值mapper.save(user);Integer userId = user.getId();sqlSession.commit();User findUser = mapper.findByid(userId);System.out.println(findUser);}
}

三 数据表结构及测试

数据表结构

测试

使用 mybatis 自定义日期类型转换器相关推荐

  1. Spring MVC__自定义日期类型转换器

    WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们.说真的,以前真没这样做过,之前都是一口气查 ...

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

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

  3. 自定义的类型转换器中怎样自定义错误消息?(待解答)

    1.HTTP没有"类型"的概念,每一项表单输入只可能是一个字符串或一个字符串数组.从HTML表单到服务器端,必须把String转换为特定的数据类型. 2.字符串和基本数据类型之间的 ...

  4. myBatis自定义jdbcType类型

    myBatis自定义jdbcType类型 DATE类的定义 DATE类配置自定义处理类–>mybatis-config.xml DATE类sql处理 JSONArray类型的定义 JSONArr ...

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

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

  6. Mybatis中的类型转换器

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

  7. EasyExcel 自定义LocalDate类型转换器Converter

    1 Maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel< ...

  8. struts2类型日期类型转换器的bug

    http://www.cnblogs.com/jingpeipei/p/5945724.html 按照操作没有问题.但是自己操作就有问题. 最后发现struts2的类型转换器在输出是必须用strut2 ...

  9. 玩转Mybatis中的类型转换器TypeHandler

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 抛开使用场景谈技术都是耍流氓 1. 场景 日常java开发中经常有这种需求,用0或者1这些代 ...

最新文章

  1. 搞科研不如当老师香?南科大助理教授“跳槽”深圳中学当老师
  2. CCAI 2017 中国人工智能大会 6.4 折抢票倒计时!
  3. 一个.net的系统的AOP设计思路二——页面控件校验映射
  4. python实战-pdf文件转txt
  5. “三十而已”女性洞察报告
  6. 新网域名查询和注册API接口类 源码
  7. 2011年倒数第三天,下雪,第一次写博客
  8. Python学习笔记(语句)
  9. 认识ruquest对象
  10. opencv sobel算子的理解
  11. 开启Accessibility的快捷方式-3次home键或者侧边键
  12. webpack5学习与实战-(九)-区分开发和生产环境的配置
  13. 北京交通大学离散数学 谓词逻辑_【精选】离散数学习题解答-第3章谓词逻辑.pdf...
  14. IDC机房电信宽带光缆施工方案以及系统建设
  15. FDDB人脸检测测评数据集介绍
  16. JavaScript实现二级联动下拉菜单
  17. 一文掌握项目如何进行分类,项目工时如何计算【实例】
  18. Translation Regime介绍
  19. 【免费资源】《Open Design Specification for .dwg files》dwg文件格式解析 免费下载
  20. win7系统硬盘安装win8.1系统及激活

热门文章

  1. 教学向|骨骼构建模太难?zbrush骨骼建模详细讲解(上)
  2. VB如何自动保存_VB开发的围棋游戏,原来VB可以这么强大!
  3. 我能抽象出整个世界。。。
  4. MySQL数据文件介绍及存放位置(*)
  5. 软件6月促销,Melodyne,Magix,Eventide,iZotope,Krotos
  6. 爬虫python和c语言区别_爬虫概述 - Python教程 - C语言网
  7. 小米AI实验室六篇论文获 ICASSP 2022收录,多模态语音唤醒挑战赛夺冠
  8. mvc cookies
  9. 最棒的机器学习(Python代码实现)
  10. 新魔百盒M304A_增强版2+16G_S905系列_UWE5621DS_卡刷/线刷固件包-当贝桌面