• TypeHandler的简单实例


    转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420149

    TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性类型和数据库列类型的转换过程进行干涉,在过程中添加某些可能需要的操作。 
    1、自定义的typeHandler类需要实现typeHandler接口并且实现接口方法; 
    2、配置文件添加<typeHandler>; 
    3、在映射文件中的参数和结果添加类型说明,javaType和jdbcType。 
    简单实例如下: 
    类型控制类------ 

    package com.chl.mybatis.typehandler;
    
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.TypeHandler;
    
    
    /**
     * @author chl
     * 类型转换器
     * 实现TypeHandler接口
     * 需要强调的是:为了让类型控制器起作用,必须在mapper.xml中对参数和结果的类型进行显示表明。
     */
    public class StringVarcharTypeHandler implements TypeHandler{
    
        @Override
        public Object getResult(ResultSet rs, String columnName) throws SQLException {
            // TODO Auto-generated method stub
            System.out.println("getResult(rs,columnName)");
            return rs.getString(columnName);
        }
    
        @Override
        public Object getResult(CallableStatement arg0, int arg1)
                throws SQLException {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public void setParameter(PreparedStatement ps, int paraIndex, Object object,
                JdbcType jt) throws SQLException {
            // TODO Auto-generated method stub
            System.out.println("setParameter()");
            ps.setString(paraIndex, (String)object);
        }
    
    }

    配置文件中:

    <?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="config.properties"></properties>
        <!-- 定义vo -->
        <typeAliases>
            <typeAlias alias="User" type="com.mybatis.test.vo.User" />
        </typeAliases>
        <!-- 类型处理器 -->
        <typeHandlers>
            <typeHandler javaType="String" jdbcType="VARCHAR"
                handler="com.chl.mybatis.typehandler.StringVarcharTypeHandler" />
        </typeHandlers>
        <!-- end define -->
        <environments default="development">
            <environment id="development">
                <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 resource="com/mybatis/test/maps/UserMapper.xml" />
        </mappers>
    </configuration>

    这里注意该控制类的位置:
    标签的顺序大致是:

    "(properties,settings,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,plugins,environments,mappers)".

    如果报类似的错误的话,就是因为标签位置放错了的原因。

    映射文件中添加类型说明:

        <insert id="insertUser2" parameterType="User">
            insert into user
            (username, password)
            values
            (#{username, javaType=String, jdbcType=VARCHAR},
            #{password, javaType=String, jdbcType=VARCHAR});
        </insert>
        <!-- 实现结果中列于对象属性的对应关系,利用javaType和jdbcType表示类型关系,这样有助于TypeHandler的匹配使用 -->
        <resultMap id="userMap" type="User">
            <result property="username" column="username" javaType="String"    jdbcType="VARCHAR"></result>
            <result property="password" column="password" javaType="String" jdbcType="VARCHAR"></result>
        </resultMap>
  • 相关阅读:
    vip视频播放
    一行Python代码画心型
    使用赫夫曼编码压缩数据
    动态规划与贪婪算法学习笔记
    boost 编写finger服务
    磁盘保护原理简介
    知乎上的一道题目 如何判断某个二进制数如是否存在两位1中间有包含0的情况?
    <Linux多线程服务端编程>学习记录
    Debian8 下面 muduo库编译与使用
    无盘工作站原理分析
  • 原文地址:https://www.cnblogs.com/tv151579/p/3297862.html
Copyright © 2020-2023  润新知