今天看了别人的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>