zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    设计tag的sql语句,支持每个tag的个数,Access数据库非msSql
    ulObj ul = new ulObj();
    Access 日期比较用 #扩住日期 代码如下
    dw中IMG标记的正则替换
    许涛的 repeater itemCommand 事件代码(经典代码,不难)
    n1视觉图片列表样式[jquery代码][A标记里面一个IMG一个EM]
    flashbox小组件开发~~开源~~
    动态读取一张图片到mc里,读取txt中的内容 flash as 全站flash专题
    简单的jQueryTab 自写的小代码
    flashCs3 按钮事件没了?原来As3已经改为监听模式了!
  • 原文地址:https://www.cnblogs.com/tv151579/p/3297862.html
Copyright © 2011-2022 走看看