陶志 發表於 2026-1-9 08:37:00

通过mybatis-plus进行数据库字段加解密方式

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>1、编写handler</li><li>2、编写加解密util</li><li>3、实体及字段配置</li><li>4、自定义mapper语句</li><li>总结</li></ul></div><p class="maodian"></p><h2>1、编写handler</h2>
<div class="jb51code"><pre class="brush:java;">@MappedJdbcTypes(JdbcType.VARCHAR)
public class EncryptHandler extends BaseTypeHandler&lt;String&gt; {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String parameter, JdbcType jdbcType) throws SQLException {
      preparedStatement.setString(i, EncryptFieldUtil.encrypt(parameter));
    }

    @Override
    public String getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
      return EncryptFieldUtil.decrypt(resultSet.getString(columnName));
    }

    @Override
    public String getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
      return EncryptFieldUtil.decrypt(resultSet.getString(columnIndex));
    }

    @Override
    public String getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
      return EncryptFieldUtil.decrypt(callableStatement.getString(columnIndex));
    }

}
</pre></div>
<p class="maodian"></p><h2>2、编写加解密util</h2>
<div class="jb51code"><pre class="brush:java;">public class EncryptFieldUtil {
    /**
   * 数据库字段加密key
   */
    private static final byte[] KEY = "sdfdfsdfdfghhhss".getBytes(StandardCharsets.UTF_8);

    /**
   * 加密字段
   */
    public static String encrypt(String value) {
      if (StrUtil.isBlank(value)) {
            return value;
      }
      AES aes = SecureUtil.aes(KEY);
      return aes.encryptHex(value);
    }

    /**
   * 解密字段
   */
    public static String decrypt(String value) {
      if (null == value) {
            return null;
      }
      try {
            return SecureUtil.aes(KEY).decryptStr(value);
      } catch (CryptoException e) {
            return value;
      }
    }

}</pre></div>
<p class="maodian"></p><h2>3、实体及字段配置</h2>
<div class="jb51code"><pre class="brush:java;">@TableName(value = "表名", autoResultMap = true)

@TableField(typeHandler = EncryptHandler.class)</pre></div>
<p class="maodian"></p><h2>4、自定义mapper语句</h2>
<div class="jb51code"><pre class="brush:xml;"> &lt;resultMap id="TitlePO" type="com.techhf.tenant.infrastruture.po.TitlePO"&gt;
       &lt;result column="title_name" property="titleName" typeHandler="com.techhf.common.mybatis.handler.EncryptHandler"/&gt;
&lt;/resultMap&gt;</pre></div>
<p class="maodian"></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>MyBatis-Plus解决字段不更新为null的六大解决方案</li><li>mybatis-plus查询字段中含有关键词时异常的问题及解决方案</li><li>MyBatis-plus与数据库字段的映射方式</li><li>Mybatis-plus默认不能更新null字段的问题及解决过程</li><li>Mybatis-Plus根据自定义注解实现自动加解密的示例代码</li><li>基于Mybatis-Plus拦截器实现MySQL数据加解密的示例代码</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 通过mybatis-plus进行数据库字段加解密方式