MyBatis 注意事项

1. MyBatis 中#{}和${}的区别

  • #{}: 解析为一个 JDBC 预编译语句(PreparedStatement )的参数标记符,一个 #{ } 代表一个占位符 ,可预防大部分 SQL 注入
  • ${}: 纯粹的 String 拼接,在动态 SQL 解析阶段将会进行变量替换,当需要传入表名或者按照列排序时可使用

2. MyBatis-plus 的字段非 null 更新

使用 Mapper 通过 bean 对象更新数据库记录的时候,字段更新的策略会影响更新的结果,mybatis-plus的字段默认策略是 FieldStrategy.NOT_NULL。该特性可在数据库表映射生成的 bean 的属性上通过以下注解使用

@TableField(value = "FstrLoanOrder",updateStrategy = FieldStrategy.NOT_EMPTY)
private String loanOrder;
public class GlobalConfig implements Serializable {

       ......
       /**
         * 字段验证策略之 insert
         *
         * @since 3.1.2
         */
        private FieldStrategy insertStrategy = FieldStrategy.NOT_NULL;
        /**
         * 字段验证策略之 update
         *
         * @since 3.1.2
         */
        private FieldStrategy updateStrategy = FieldStrategy.NOT_NULL;
        /**
         * 字段验证策略之 select
         *
         * @since 3.1.2
         */
        private FieldStrategy selectStrategy = FieldStrategy.NOT_NULL;
    }
}
public enum FieldStrategy {
    /**
     * 忽略判断
     */
    IGNORED,
    /**
     * 非NULL判断, bean 对象属性为 NULL 则不更新对应表字段
     */
    NOT_NULL,
    /**
     * 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
     */
    NOT_EMPTY,
    /**
     * 默认的,一般只用于注解里
     * <p>1. 在全局里代表 NOT_NULL</p>
     * <p>2. 在注解里代表 跟随全局</p>
     */
    DEFAULT,
    /**
     * 不加入 SQL
     */
    NEVER
}

发布了107 篇原创文章 · 获赞 99 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45505313/article/details/104855372