目的:身份证号在数据库中以密文的形式存储。
步骤流程:
- 在数据库database中,为表a_table添加name、mobile、idNo三个字段,便于直观查询数据。
alter table a_table add name varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', add mobile varchar(16) NOT NULL DEFAULT '' COMMENT '手机号',add id_no varchar(24) NOT NULL DEFAULT '' COMMENT '身份证号'; |
- 在数据库database中,为表b_table添加idNo_des、idNo_asterisk。用来对身份证号进行密文存储。
alter table b_table add id_no_des varchar(64) NOT NULL DEFAULT '' COMMENT '身份证号des加密', add id_no_asterisk varchar(24) NOT NULL DEFAULT '' COMMENT '身份证号掩码'; |
- 修改实体类ATable.java、BTable.java,增加相应的字段。
- 修改ATableMapper.xml、BTableDetailMapper.xml文件,增加相应字段的增删改查的类型处理方法。
typeHandler="com.handler.IdNoDesHandler" |
- 配置mybatis的TypeHandler.
<bean id="myBatisSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="shuffle-dataSource" /> <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml" /> <!--typeHandler注入--> <property name="typeHandlersPackage" value=" com.handler.IdNoDesHandler " /> </bean> |
8、编写IdDesHandler处理类
public class IdNoDesHandler extends BaseTypeHandler {
@Override public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, DESUtils.encrypt((String)parameter)); } @Override public Object getNullableResult(ResultSet rs, String columnName) throws SQLException { String columnValue = rs.getString(columnName); return DESUtils.decrypt(columnValue); } @Override public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String columnValue = rs.getString(columnIndex); return DESUtils.decrypt(columnValue); } @Override public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String columnValue = cs.getString(columnIndex); return DESUtils.decrypt(columnValue); } } |