使用 mybatis 自定义日期类型转换器的示例代码

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

前言

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

一、resources

1.1 sqlMapConfig.xml

typeHandlers: 自定义的日期类型转换器:
(1)将日期类型转为long的长整型存入数据库中。
(2)将数据库中的bigint(本质对应java的long类型)转为date类型。environments:加载数据库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;
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
        long aLong = resultSet.getLong(i);
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        long aLong = callableStatement.getLong(i);
}

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;
    @Override
    public 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 自定义日期类型转换器的文章就介绍到这了,更多相关mybatis 自定义日期类型转换器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis自定义类型转换器实现加解密

    需求场景:当数据库中保存的部分数据需要加密,页面需要正常显示时.这是就需要我们自定义类型转换器,在Mybatis执行SQL得到结果时,通过自定义类型转换器将CHAR或者VARCHAR2进行加解密处理,Java代码如下: /**自定义typeHandler<br/> * 1 插入数据库, 加密 * 2 查询,解密 * @author Administrator * */ public class CryptTypeHandler implements TypeHandler<CryptTy

  • Mybatis自定义类型转换器的使用技巧

    一般情况下,mybatis自带的类型转换器已经足够用了,但是需求永无止境,自定义类型转换器还是学一下吧,指不定哪天会用上. 举个没啥用的示例 javabean如下: public class User { private Integer id; private Message message; } public class Message { private Integer id; private String address; private String job; } 数据库User表如下:

  • Mybatis实现自定义类型转换器TypeHandler的方法

    先给大家简单介绍下mybatis MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结. Mybatis实现自定义的转换器,

  • 使用 mybatis 自定义日期类型转换器的示例代码

    目录 前言 一.resources 1.1sqlMapConfig.xml 1.2log4j.properties 1.3userMapper.xml 二.java结构 2.1dao 2.2handler 2.3pojo 2.4service 三数据表结构及测试 前言 使用mybatis中的typeHandlers 实现自定义日期类型的转换器.重点在2.2 handler中 一.resources 1.1 sqlMapConfig.xml typeHandlers: 自定义的日期类型转换器:(1

  • Spring MVC自定义日期类型转换器实例详解

    Spring MVC自定义日期类型转换器实例详解 WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们.说真的,以前真没这样做过,之前都是一口气查询到数据,然后在jsp页面上格式化,最后展示给用户.但是这次不同,这次我纯属操作数据,没有页面.直接从数据库拿数据给它们返数据.它们给我传数据我持久化数据,说到这里一个小问题就默默的来了. 首先把问题还原一下吧(这是一个数据导出功能),下图中用红框圈

  • mybatis自定义参数类型转换器数据库字段加密脱敏

    目录 1 问题背景 2 解决方案 2.1 使用数据库加密算法 2.2 使用mybatis的自定义参数类型转换器 3 一般web项目使用 3.1 创建自定义Java类型 3.2 自定义类的转换处理器 3.3 配置自定义类型和类型转换器 3.4 查询使用 3.5 新增修改使用 4. springboot项目使用 4.1 配置自定义类型和类型转换器 4.2 mybatis-plus的使用 1 问题背景 在数据库存储人员的信息时,有一些信息是敏感数据,如身份证号.出生地等.为了防止信息泄漏,这些信息不允

  • SpringBoot+MyBatis+AOP实现读写分离的示例代码

    目录 一. MySQL 读写分离 1.1.如何实现 MySQL 的读写分离? 1.2.MySQL 主从复制原理? 1.3.MySQL 主从同步延时问题(精华) 二.SpringBoot+AOP+MyBatis实现MySQL读写分离 2.1.AbstractRoutingDataSource 2.2.如何切换数据源 2.3.如何选择数据源 三 .代码实现 3.0.工程目录结构 3.1.引入Maven依赖 3.2.编写配置文件,配置主从数据源 3.3.Enum类,定义主库从库 3.4.ThreadL

  • POI对Excel自定义日期格式的读取(实例代码)

    用POI读取Excel数据:(版本号:POI3.7) 1.读取Excel private List<String[]> rosolveFile(InputStream is, String suffix, int startRow) throws IOException, FileNotFoundException { Workbook xssfWorkbook = null; if ("xls".equals(suffix)) { xssfWorkbook = new H

  • springboot整合Mybatis、JPA、Redis的示例代码

    引言 在springboot 项目中,我们是用ORM 框架来操作数据库变的非常方便.下面我们分别整合mysql ,spring data jpa 以及redis .让我们感受下快车道. 我们首先创建一个springboot 项目,创建好之后,我们来一步步的实践. 使用mybatis 引入依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-

  • SpringBoot mybatis 实现多级树形菜单的示例代码

    一.前言 iview-admin中提供了 v-org-tree这么一个vue组件可以实现树形菜单,下面小编来提供一下在element-ui中的使用教程(项目见:https://github.com/lison16/v-org-tree) 小编集成了el-dropdown下拉菜单(鼠标左击显示菜单),和右击自定义菜单,两种方式,效果图如下: 二.使用教程 (1)安装依赖 npm install clipboard npm install v-click-outside-x npm install

  • Mybatis Plus 实现批量插入的示例代码

    目录 一. 添加依赖 二. 继承默认方法注入 三. 在 MybatisPlusConfig 配置文件中注入 Bean 四. 扩展自带 BaseMapper 五. 业务层面实现 Mybatis Plus 的 IService 接口中提供了批量插入的方法,然而,它的内部实现逻辑竟然是这样的: 居然是循环单条插入?!逗人玩嘛,好吧,自己动手,丰衣足食. 一. 添加依赖 <!--mybatis plus extension,包含了mybatis plus core--> <dependency&

  • Flutter实现自定义搜索框AppBar的示例代码

    目录 介绍 效果图 实现步骤 完整源码 总结 介绍 开发中,页面头部为搜索样式的设计非常常见,为了可以像系统AppBar那样使用,这篇文章记录下在Flutter中自定义一个通用的搜索框AppBar记录. 功能点: 搜索框.返回键.清除搜索内容功能.键盘处理. 效果图 实现步骤 首先我们先来看下AppBar的源码,实现了PreferredSizeWidget类,我们可以知道这个类主要是控制AppBar的高度的,Scaffold脚手架里的AppBar的参数类型就是PreferredSizeWidge

  • Android自定义滑动验证条的示例代码

    本文介绍了Android自定义滑动验证条的示例代码,分享给大家,具体如下: *注:不知道为什么,h5的标签在这里没用了,所以我也只能用Markdown的语法来写了 项目地址:https://github.com/994866755/handsomeYe.seekbar.github.io 需求: 在我们的某些应用中需要滑动验证.比如说这个样子的: 刚开始我也很懵逼要怎么去弄,结果我去看了一些人的代码,有人是用自定义viewgroup去做,就是viewgroup包含滑动块和滑动条.但我觉得太麻烦,

随机推荐