mybatis的TypeHandler 的使用

今天看了别人的mybatis的教学视频,自己手写了一个简单的自定义的TypeHandler,有些细节记录一下。

1、定义自己的TypeHandler,代码如下:

package com.example.handler;

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

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

@MappedJdbcTypes(JdbcType.VARCHAR)
public class DrafireStringHandler extends BaseTypeHandler<String> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i, "Drafire-" + s);
    }

    @Override
    public String getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return resultSet.getString(s);
    }

    @Override
    public String getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return resultSet.getString(i);
    }

    @Override
    public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return callableStatement.getString(i);
    }
}

 

2、配置mybatis-config.xml的位置,如下:

server:
  port: 9001
spring:
  datasource:
    name: test
    url: jdbc:mysql://127.0.0.1:3306/bank
    username: root
    password: 123456
  session:
    store-type: jdbc
mybatis:
  mapper-locations: classpath:mapping/*.xml
  type-aliases-package: com.tuandai.model
  config-location: classpath:mybatis-config.xml    #一定要注明location的位置
  # default-store in spring session. it will be set in redis only outside.
rabbit:
  connect:
    host: localhost
    port: 5672
    username: admin
    password: 123456
    channelCacheSize: 100

 

3、定义一个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>
    <typeHandlers>
        <typeHandler handler="com.tuandai.handler.DrafireStringHandler"></typeHandler>
    </typeHandlers>
    <environments default="development">
        <environment id="sell">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${ds.sell.driverClassName}"/>
                <property name="url" value="${ds.sell.url}"/>
                <property name="username" value="${ds.sell.username}"/>
                <property name="password" value="${ds.sell.password}"/>
            </dataSource>
        </environment>

        <environment id="bank">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${ds.bank.driverClassName}"></property>
                <property name="url" value="${ds.bank.url}"></property>
                <property name="username" value="${ds.bank.username}"></property>
                <property name="password" value="${ds.bank.password}"></property>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
    </mappers>
</configuration>

在这里有2个地方要注意,1、configuration里面的标签的顺序必须严格遵循以下顺序:

properties>settings>typeAliases>typeHandlers>objectFactory>objectWrapperFactory>plugins>environments>databaseIdProvider>mappers,也就是properties必须放在第一位(如果有),并依次配置需要的标签。

2、注册TypeHandler

<typeHandlers>
        <typeHandler handler="com.example.handler.DrafireStringHandler"></typeHandler>
</typeHandlers>

posted on 2018-10-11 14:49  drafire  阅读(510)  评论(0编辑  收藏  举报