使用TypeHandler实现数据入库前的过滤

 需求: 数据入库前过滤emoji表情


1.编写typeHandler类

@MappedJdbcTypes({JdbcType.VARCHAR})
public class EmojiStringTypeHandler extends StringTypeHandler {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        super.setNonNullParameter(ps, i, StringUtils.filterEmoji(parameter), jdbcType);
    }
}

其中emoji过滤:

public static String filterEmoji(String source) {
        int len = source.length();
        StringBuilder buf = new StringBuilder(len);
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (isNotEmojiCharacter(codePoint)) {
                buf.append(codePoint);
            }
        }
        return buf.toString();
    }

private static boolean isNotEmojiCharacter(char codePoint) {
        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)
                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
                || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
    }


2.做mybatis配置,由于使用了springboot,配置的是type-handlers-package


3.在mapper.xml中,对要过滤的字段进行显式的type声明,如:


INSERT INTO table (
    id,
    apply_no,
    cert_id,
    customer_name,
    app_remark,
    pc_remark
) VALUES (
    #{id},
    #{applyNo},
    #{certId},
    #{customerName, jdbcType=VARCHAR},
    #{appRemark, jdbcType=VARCHAR},
    #{pcRemark, jdbcType=VARCHAR}
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值