MyBatis自定义类型转换器实现加解密
需求场景:当数据库中保存的部分数据需要加密,页面需要正常显示时。这是就需要我们自定义类型转换器,在Mybatis执行SQL得到结果时,通过自定义类型转换器将CHAR或者VARCHAR2进行加解密处理,Java代码如下:
/**自定义typeHandler<br/>
*1插入数据库,加密
*2查询,解密
*@authorAdministrator
*
*/
publicclassCryptTypeHandlerimplementsTypeHandler<CryptType>{
publicCryptTypegetResult(ResultSetrs,StringcolumnName)throwsSQLException{
Stringvalue="";
CryptTypev=newCryptType(value);
value=rs.getString(columnName);
if(value!=null){
value=decrypt(value.toString());
v.setValue(value);
}
returnv;
}
publicCryptTypegetResult(ResultSetrs,intcolumnIndex)throwsSQLException{
Stringvalue="";
CryptTypev=newCryptType(value);
value=rs.getString(columnIndex);
if(value!=null){
v.setValue(value);
}
returnv;
}
publicCryptTypegetResult(CallableStatementcs,intcolumnIndex)throwsSQLException{
Stringvalue="";
CryptTypev=newCryptType();
value=cs.getString(columnIndex);
if(value!=null){
v.setValue(value);
}
returnv;
}
publicvoidsetParameter(PreparedStatementps,inti,CryptTypeparameter,JdbcTypearg3)throwsSQLException{
Stringvalue="";
if(parameter!=null&¶meter.toString()!=null){
value=encrypt(parameter.toString());
}
ps.setString(i,value.toString());
}
/**插入数据库
*@paramvalue
*@return
*/
privateStringencrypt(Stringvalue){
value=CryptUtils.encrypt(value);
returnvalue;
}
/**从数据库读出
*@paramvalue
*@return
*/
privateStringdecrypt(Stringvalue){
value=CryptUtils.decrypt(value);
returnvalue;
}
}
自定义类型
importjava.io.Serializable;
/**
*自定义类型
*定义为该类型的实体属性会走CryptTypeHandler.java做加解密处理
*
*@authoryy
*
*/
publicclassMyStringimplementsSerializable,CharSequence,Comparable<String>{
privatestaticfinallongserialVersionUID=1L;
privateStringvalue;
publicMyString(){
}
publicCryptType(Stringvalue){
this.value=value;
}
publicStringgetValue(){
returnvalue;
}
publicvoidsetValue(Stringvalue){
this.value=value;
}
publicintcompareTo(Stringarg0){
//TODOAuto-generatedmethodstub
return0;
}
publiccharcharAt(intarg0){
//TODOAuto-generatedmethodstub
return0;
}
publicintlength(){
//TODOAuto-generatedmethodstub
return0;
}
publicCharSequencesubSequence(intarg0,intarg1){
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publicStringtoString(){
returnvalue;
}
}
mybatis自定义类型配置
<!--自定义类型--> <typeHandlers> <typeHandlerjavaType="com.***.MyString"handler="com.***.MyTypeHandler"/> </typeHandlers>
实体中使用
publicclassLoanEnterprise{
privateMyStringname;
//注意:
//如果页面有查询条件也被加密时,mybatissql中的条件判断会无法匹配,暂时的一种解决办法是在
publicCryptTypegetName(){
if(name!=null&&name.getValue().equals("")){
returnnull;
}else{
returnname;
}
}
publicvoidsetName(CryptTypename){
this.name=name;
}
}
以上所述是小编给大家介绍的MyBatis自定义类型转换器实现加解密,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!