MyBatis 入门(五)--typeHandlers

一、作用及默认的处理

类型处理器的作用就是

  • 查询时把数据库存储的值转换成java类型
  • 修改是把java类型转换成数据库类型存储,处理
  • 下面这个表格描述了默认的类型处理器。
类型处理器 Java 类型 JDBC 类型
BooleanTypeHandler java.lang.Boolean, boolean 任何兼容的布尔值
ByteTypeHandler java.lang.Byte, byte 任何兼容的数字或字节类型
ShortTypeHandler java.lang.Short, short 任何兼容的数字或短整型
IntegerTypeHandler java.lang.Integer, int 任何兼容的数字和整型
LongTypeHandler java.lang.Long, long 任何兼容的数字或长整型
FloatTypeHandler java.lang.Float, float 任何兼容的数字或单精度浮点型
DoubleTypeHandler java.lang.Double, double 任何兼容的数字或双精度浮点型
BigDecimalTypeHandler java.math.BigDecimal 任何兼容的数字或十进制小数类型
StringTypeHandler java.lang.String CHAR 和 VARCHAR 类型
ClobTypeHandler java.lang.String CLOB 和 LONGVARCHAR 类型
NStringTypeHandler java.lang.String NVARCHAR 和 NCHAR 类型
NClobTypeHandler java.lang.String NCLOB 类型
ByteArrayTypeHandler byte[] 任何兼容的字节流类型
BlobTypeHandler byte[] BLOB 和 LONGVARBINARY 类型
DateTypeHandler java.util.Date TIMESTAMP 类型
DateOnlyTypeHandler java.util.Date DATE 类型
TimeOnlyTypeHandler java.util.Date TIME 类型
SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP 类型
SqlDateTypeHandler java.sql.Date DATE 类型
SqlTimeTypeHandler java.sql.Time TIME 类型
ObjectTypeHandler Any 其他或未指定类型
EnumTypeHandler Enumeration Type VARCHAR-任何兼容的字符串类型, 作为代码存储(而不是索引)
EnumOrdinalTypeHandler Enumeration Type Any compatible NUMERIC or DOUBLE, as the position is stored (not the code itself).

二、自定义类型

   例如我们在数据库经常把时间存储为一个14位的VARCHAR(YYYYmmddssss)。而前台java层为java.util.Date,在这里我们就简单做一个类型处理。
  • 定义类型处理
package com.elements.typehandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class DataTimeTypeHandler extends BaseTypeHandler<Date> {

    /**
     *
     * 这里应该是在保存数据的时候,把前台的日期类型转换成数据的varchar 我们使用了SimpleDateFormat来转换data类型
     * */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i,
            Date parameter, JdbcType jdbcType) throws SQLException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        ps.setString(i, sdf.format(parameter));
    }

    /**
     * 下面三个函数应该都是返回到java层时调用,我们把varchar转换成Date类型
     */
    @Override
    public Date getNullableResult(ResultSet rs, String columnName)
            throws SQLException {
        String varchartime = rs.getString(columnName);
        if (varchartime!=null)
        return new Date(Long.parseLong(varchartime));
        else return null;
    }

    @Override
    public Date getNullableResult(ResultSet rs, int columnIndex)
            throws SQLException {
        String varchartime = rs.getString(columnIndex);
        if (varchartime!=null)
            return new Date(Long.parseLong(varchartime));
            else return null;
    }

    @Override
    public Date getNullableResult(CallableStatement cs, int columnIndex)
            throws SQLException {
        String varchartime = cs.getString(columnIndex);
        if (varchartime!=null)
            return new Date(Long.parseLong(varchartime));
            else return null;
    }

}
  • mybatis-config.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>

    <properties resource="jdbc.properties" />

  <typeHandlers>
     <typeHandler handler="com.elements.typehandler.DataTimeTypeHandler" javaType="java.util.Date" jdbcType="VARCHAR"/>
      <package name="com.elements.user"/>
  </typeHandlers>

    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper class="com.elements.user.dao.UserMapper" />

    </mappers>

</configuration>
  • User类
package com.elements.user.model;

import java.util.Date;

public class User {
    private Integer userid;
    private String username;
    private String useremail;
    private Date createtime;
    private Date updatetime;

    public Integer getUserid() {
        return userid;
    }
    public void setUserid(Integer userid) {
        this.userid = userid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }
    public String getUseremail() {
        return useremail;
    }
    public void setUseremail(String useremail) {
        this.useremail = useremail == null ? null : useremail.trim();
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime ;
    }
    public Date getUpdatetime() {
        return updatetime;
    }
    public void setUpdatetime(Date updatetime) {
        this.updatetime = updatetime;
    }
    @Override
    public String toString() {
        return "User [userid=" + userid + ", username=" + username
                + ", useremail=" + useremail + ", createtime=" + createtime
                + ", updatetime=" + updatetime + "]";
    }

}
  • UserMapper配置文件
<?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.elements.user.dao.UserMapper" >

  <resultMap id="BaseResultMap" type="com.elements.user.model.User" >

    <id column="userId" property="userid" jdbcType="INTEGER" />
    <result column="UserName" property="username" jdbcType="VARCHAR" />
    <result column="UserEmail" property="useremail" jdbcType="VARCHAR" />
    <result column="createTime" property="createtime" jdbcType="VARCHAR" />
    <result column="updateTime" property="updatetime" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >

    userId, UserName, UserEmail, createTime, updateTime
  </sql>

  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >

    select
    <include refid="Base_Column_List" />
    from user
    where userId = #{userid,jdbcType=INTEGER}
  </select>

  <insert id="insert" parameterType="com.elements.user.model.User" >

    insert into user (userId, UserName, UserEmail,
      createTime, updateTime)
    values (#{userid,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{useremail,jdbcType=VARCHAR},
      #{createtime,jdbcType=VARCHAR}, #{updatetime,jdbcType=VARCHAR})
  </insert>

</mapper>

注意:我们没有在mapper文件内显示的做类型转换 ,他已经默认把这两种类型(javaType=”java.util.Date” jdbcType=”VARCHAR” )的互转都调用我们的类型处理了

代码下载地址:http://pan.baidu.com/s/1eRDzY6m

时间: 2024-10-31 04:49:30

MyBatis 入门(五)--typeHandlers的相关文章

&lt;MyBatis&gt;入门五 查询的返回值处理

select : 返回对象:  <select  id = " "  resultType= "对象的全类名"  /> List: <select  id = " "  resultType = "list泛型中的值" /> Map: 1.返回一条记录 Map<String,Object>      key -> 字段 value -> 值                    

MyBatis入门(五)---延时加载、缓存

一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @[email protec

MyBatis入门基础(一)

一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记录于此,方便大家参考,也方便自己查阅. 话不多说,先看看原始的JDBC程序代码,看看这样的代码存在什么问题. package com.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P

mybatis入门(三):mybatis的基础特性

mybatis的知识点: 1.mybatis和hibernate本质区别和应用场景 hibernate:是一个标准的ORM框架(Ojbect relation mapper对象关系映射).入门门槛较高的,不需要程序员写sql, sql语句自动生成了.对sql语句进行优化,修改比较困难. 应用场景: 适用于需求变化不多的中小型项目.比如后台管理,erp,orm,oa.. mybatis:专注于sql本身,需要程序员自己编写sql语句,sql修改,优化比较方便,mybatis是一个不完全的ORM框架

mybatis入门基础(三)----SqlMapConfig.xml全局配置文件解析

阅读目录 一:SqlMapConfig.xml配置文件的内容和配置顺序如下 二:properties属性 三:settings全局参数配置 四:typeAiases(别名)--重点掌握 五:typeHandlers(类型处理器) 六:mappers(映射配置) 回到顶部 一:SqlMapConfig.xml配置文件的内容和配置顺序如下 properties(属性) settings(全局配置参数) typeAiases(类型别名) typeHandlers(类型处理器) objectFactor

MyBatis入门(二)---一对一,一对多

一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybatis ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @[emai

Mybatis入门实例

第一步:创建项目导入jar包 第二步:建表: CREATE TABLE `person` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `NAME` varchar(10) DEFAULT NULL, `GENDER` int(10) DEFAULT NULL, `ADRESS` varchar(50) DEFAULT NULL, `BIRTHDAY` date DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB A

框架 day65 Mybatis入门(基础知识:框架原理,入门[curd],开发dao层,全局与映射配置)

Mybatis 基础知识(一) 第一天:基础知识(重点) mybatis介绍 mybatis框架原理(掌握) mybaits入门程序(掌握) 用户信息进行增.删.改.查 mybatis开发dao层方法:(掌握) 原始dao开发方法(dao接口和实现类需要程序员编写) mapper代理开发方法(程序员只需要编写接口) SqlMapConfig.xml(mybatis全局配置文件)(掌握) mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis动态sql(掌握)   1   

MyBatis入门程序(基于XML配置)

创建一个简单的MyBatis入门程序,实现对学生信息的增删改查功能(基于XML配置) 一.新建一个Java工程,导入MyBatis核心jar包.日志相关的jar包以及连接Oracle数据库所需驱动包,目录结构如下 二.创建MyBatis核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//myba