自定义typeHandler
对于自定义typeHandler来说,需要在配置文件中注册typeHandlers 然后需要实现TypeHandler接口,
一个例子
首先编写调度的处理类
package com.ming.MyBatis;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class StringTypeHandler implements TypeHandler {
private static Logger logger = LogManager.getLogger();
/**
* 对预编译的Sql语句进行设置的时候,
* @param ps
* @param i
* @param parameter
* @param jdbcType
* @throws SQLException
*/
@Override
public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
logger.info("使用TypeHandler");
// 设置预编译的sql对象,的string
ps.setString(i, parameter);
}
/**
* 获得结果的时候,获取到列名的时候,调度此方法
* @param rs
* @param columnName
* @return
* @throws SQLException
*/
@Override
public String getResult(ResultSet rs, String columnName) throws SQLException {
logger.info("使用自定义类型,结果获取列名字符串");
return rs.getString(columnName);
}
/**
* 获取结果集中的index
* @param rs
* @param columnIndex
* @return
* @throws SQLException
*/
@Override
public String getResult(ResultSet rs, int columnIndex) throws SQLException {
logger.info("在结果集中获取columnIndex");
return rs.getString(columnIndex);
}
/**
* 获取结果集中的下标对应的字符串
* @param cs
* @param columnIndex
* @return
* @throws SQLException
*/
@Override
public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
logger.info("结果集中,下标获取到字符串");
return cs.getString(columnIndex);
}
}
再次编写配置文件
传入数据库的为的VARCHAR类型,javaType类型为string类型,调度的类为com.ming.MyBatis.StringTypeHandler
修改映射文件,说明那些需要对结果进行修改
/p>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
SELECT id, role_name, note FROM t_role4 WHERE id = #{id}
其中传入的参数为int类型,由于结果中mybatis没有int类型,对应的是INTEGER类型,在mysql中两者类型相同,所以修改如上所示,表类型
书写index.jsp
Hello World!
long startTime = System.currentTimeMillis(); //获取开始时间
SqlSession sqlSession = null;
Role role = null;
for(int i = 0; i < 10; i++) {
try {
sqlSession = SqlSessionFactoryUtil.openSqlSesion();
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
role = roleMapper.getRole(100);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
long endTime = System.currentTimeMillis(); //获取结束时间
%>
已经查询成功
查看日志文件,日志文件已经输出相关信息
2019-04-13 05:03:33.181 [DEBUG] org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:136) - Opening JDBC Connection
2019-04-13 05:03:33.181 [DEBUG] org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:397) - Checked out connection 197673257 from pool.
2019-04-13 05:03:33.182 [DEBUG] org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:100) - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@bc84129]
2019-04-13 05:03:33.235 [DEBUG] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143) - ==> Preparing: SELECT id, role_name, note FROM t_role4 WHERE id = ?
2019-04-