mybatis系列-2-自定义typyHandler

简介: 注册typeHandler注册TypeHandler 建立了自己的TypeHandler之后就需要把它注册到Mybatis的配置文件中,让Mybatis能够识别并使用它。

注册typeHandler

注册TypeHandler
建立了自己的TypeHandler之后就需要把它注册到Mybatis的配置文件中,让Mybatis能够识别并使用它。注册TypeHandler主要有两种方式,一种是通过在Mybatis配置文件中定义typeHandlers元素的子元素typeHandler来注册;另一种是通过在Mybatis配置文件中定义typeHandlers元素的子元素package来注册。使用typeHandler子元素注册时一次只能注册一个TypeHandler,而使用package子元素注册时,Mybatis会把指定包里面的所有TypeHandler都注册为TypeHandler。使用typeHandler子元素注册时我们需要通过它的handler属性来指明当前要注册的TypeHandler的全名称,这个属性是必须要的。另外还有两个附加属性可以指定,一个是javaType,用以指定对应的java类型;另一个是jdbcType,用以指定对应的jdbc类型。使用package子元素注册时需要我们通过它的name属性来指定要扫描的包,如果这个时候我们也需要指定对应TypeHandler的javaType和jdbcType的话就需要我们在TypeHandler类上使用注解来定义了。Mybatis注册TypeHandler最基本的方式就是建立一个javaType、jdbcType和TypeHandler的对应关系。在使用typeHandler子元素进行注册的时候,有三种类型的注册方式:
1.如果我们指定了javaType和jdbcType,那么Mybatis会注册一个对应javaType和jdbcType的TypeHandler。
2.如果我们只指定了javaType属性,那么这个时候又分两种情况:
(1)如果我们通过注解的形式在TypeHandler类上用@MappedJdbcTypes指定了对应的jdbcType,那么Mybatis会一一注册指定的javaType、jdbcType和TypeHandler的组合,也包括使用这种形式指定了jdbcType为null的情况。现假设我们有如下这样一个StringArrayTypeHandler:

配置文件

    <typeHandlers>
        <typeHandler handler="com.xxx.typeHandler.TestStringTypeHandler" javaType="string" jdbcType="VARCHAR" />
    </typeHandlers>

实现typeHandler接口

package com.xxx.typeHandler;

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


import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


/**
 * Created by chenjianan on 2016/11/10-17:00.
 * <p>
 * Describe:
 */
 @MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes({String.class})
public class TestStringTypeHandler extends BaseTypeHandler<String> {

    private Logger log= Logger.getLogger(TestStringTypeHandler.class);

    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {

        log.info("使用我的TypeHandler");
        preparedStatement.setString(i, s);
    }

    public String getNullableResult(ResultSet resultSet, String s) throws SQLException {
        log.info("使用我的TypeHandler,ResultSet列名获取");
        return resultSet.getString(s);
    }

    public String getNullableResult(ResultSet resultSet, int i) throws SQLException {
        log.info("使用我的TypeHandler,ResultSet下标获取");
        return resultSet.getString(i);
    }

    public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        log.info("使用我的TypeHandler,callableStatement下标获取");
        return callableStatement.getString(i);
    }
}

自定义typeHandler的使用

方法一

 <resultMap id="roleMap" type="role">
        <result jdbcType="VARCHAR" javaType="string" column="note" property="note" />
    </resultMap>

    <select id="typeHandlerTest" parameterType="string" resultMap="roleMap">
        SELECT note FROM role WHERE note=#{note}
    </select>

这里的 jdbcType="VARCHAR" javaType="string"  要和 配置文件的 javaType="string" jdbcType="VARCHAR"   一致

方法二

    <resultMap id="roleMap" type="role">
        <result  column="note" property="note" typeHandler="com.plife.typeHandler.TestStringTypeHandler" />
    </resultMap>

    <select id="typeHandlerTest" parameterType="string" resultMap="roleMap">
        SELECT note FROM role WHERE note=#{note}
    </select>
这种方法 配置文件的 typeHandler不用配置

方法三

    <select id="typeHandlerTest" parameterType="string" resultType="role">
        SELECT note FROM role WHERE note=#{note javaType=string,jdbcType=VARCHAR,typeHandler=com.plife.typeHandler.TestStringTypeHandler}
    </select>
这种方法 配置文件的 typeHandler不用配置
相关文章
|
2月前
|
SQL Java 数据库连接
|
5月前
|
SQL Java 数据库连接
mybatis常见分页技术和自定义分页原理实战
mybatis常见分页技术和自定义分页原理实战
|
5月前
|
SQL XML Java
Mybatis Plus自定义全局SQL注入
Mybatis Plus自定义全局SQL注入
91 0
|
4月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
94 0
|
4月前
|
SQL 数据库
在mybatis-plus怎么使用自定义的sql语句
在mybatis-plus怎么使用自定义的sql语句
69 0
|
5月前
|
存储 Java 数据库连接
MyBatis的类型处理器TypeHandler与自定义实现
MyBatis的类型处理器TypeHandler与自定义实现
188 0
|
1月前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
1月前
|
Java 关系型数据库 MySQL
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
|
7月前
|
SQL 关系型数据库 MySQL
MyBatis-plus执行自定义SQL
MyBatis-plus执行自定义SQL
116 0
|
4月前
|
Java 关系型数据库 MySQL
结合springboot+mybatis-plus+lombok,自定义Page封装类
结合springboot+mybatis-plus+lombok,自定义Page封装类
57 0