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

来源:互联网 发布:客多宝宠物店软件下载 编辑:程序博客网 时间:2024/04/30 14:01

 需求: 数据入库前过滤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
原创粉丝点击