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自定义类型转换器实现加解密,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!