| Type Handler | Java Types | JDBC Types |
|---|---|---|
| BooleanTypeHandler | java.lang.Boolean, boolean | Any compatible BOOLEAN |
| ShortTypeHandler | java.lang.Short, short | Any compatible NUMERIC or SHORT INTEGER |
| StringTypeHandler | java.lang.String | CHAR, VARCHAR |
| … | … | 详细可见org.apache.ibatis.type包下内容 |
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* author: boo
*/
@MappedTypes({String.class})
//@MappedJdbcTypes(JdbcType.VARCHAR)
public class AESEncryptHandler extends BaseTypeHandler<String>{
/** 将parameter转换成对应的数据库类型 */
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, AES.encrypt(parameter));
}
/** 根据字段名获取从数据库读取的字段数据 */
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
String columnValue = rs.getString(columnName);
return AES.decrypt(columnValue);
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String columnValue = rs.getString(columnIndex);
return AES.decrypt(columnValue);
}
/** 根据下标获取从数据库读取的字段数据 */
@Override
public String getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
String columnValue = cs.getString(columnIndex);
return AES.decrypt(columnValue);
}
public AESEncryptHandler() {
}
}
以上为自定义的一个TypeHandler,作用是对一些数据库的敏感字段进行加密处理;
其中 AES.encrypt(String str)是自定义的一个字符串加密方法,这里可以根据自己的需求实现
有三种方式可以进行全局注册
<typeHandlers>
<typeHandler handler="com.boo.mybatis.demo.convert.AESEncryptHandler "/>
typeHandlers>
@Configuration
public class MyBatisConfig
{
......
......
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
{
String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
String mapperLocations = env.getProperty("mybatis.mapperLocations");
String configLocation = env.getProperty("mybatis.configLocation");
typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
VFS.addImplClass(SpringBootVFS.class);
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(...);
// 自定义TypeHandler所在包
// sessionFactory.setTypeHandlersPackage("com.ruoyi.common.convert");
// 指定注册单个或多个TypeHandler
sessionFactory.setTypeHandlers(new TypeHandler[]{new AESEncryptHandler()});
sessionFactory.setTypeAliasesPackage(...);
sessionFactory.setMapperLocations(...);
sessionFactory.setConfigLocation(...);
return sessionFactory.getObject();
}
}