Mybatis注解整合自定义注解动态生成语句,以及减少代码量

MyBatis 的强大特性之一便是它的动态 SQL,但是需要写xml文件,真是令人头大,如果你也有这样烦恼,那么继续往下看吧


提示:以下是本篇文章正文内容,下面案例可供参考

一、自定义注解动态SQL是什么?

自定义注解动态SQL语句是基于Mybatis注解加上自定义注解,只需要再实体类上配置@Table和@Colum@Join注解再配合上自定义工具类可以自动生成我们需要的SQL语句

二、使用步骤

1.添加Hutool Java工具类库

        <!--工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.4</version>
        </dependency>

2.如需分页增加pagehelper插件

        <!--pageHelper-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

3.添加自定义注解

3.1添加@Table注解

指定实体类对应的数据库表名称

/**
 * @author zhangjianshan1992
 */
@Target({
   ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
   

    String value();

}

3.2添加@Column 注解

代码映射数据库字段及其他规则

/**
 * @author zhangjianshan1992
 */
@Target({
   ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
   
    /**
     * 数据库字段名称
     *
     * @return
     */
    String value();

    /**
     * 属性和字段的连接符
     *
     * @return
     */
    String bridge() default SqlConstant.SQL_EQUAL;

    /**
     * 添加自动添加  or
     *
     * @return
     */
    String whereOr() default "";

    /**
     * 是否作为更新删除条件(主键)
     *
     * @return
     */
    boolean isPrimary() default false;

    /**
     * 是否作为查询条件
     *
     * @return
     */
    boolean isWhere() default false;

    /**
     * 是否作为查询字段
     *
     * @return
     */
    boolean isSelect() default true;

    /**
     * 是否作为更新字段
     *
     * @return
     */
    boolean isUpdate() default true;

    /**
     * 是否作为插入字段
     *
     * @return
     */
    boolean isInsert() default true;
}

3.3添加@Join注解

关联查询所需

/**
 * @author zhangjianshan1992
 */
@Target({
   ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Join {
   

    /**
     * 关联实体类
     *
     * @return
     */
    Class Class() default Object.class;

    /**
     * 关联表明别名
     *
     * @return
     */
    String alias() default "";

    /**
     * 关联字段
     *
     * @return
     */
    String column() default "";


    /**
     * 关联种类 默认 left join
     *
     * @return
     */
    String type() default SqlConstant.SQL_LEFT_JOiN;
}

4.添加公共类

4.1添加静态常量类

/**
 * @author zhangjianshan on 2020-12-02
 */
public class SqlConstant {
   

    /**
     * 左模糊
     */
    public static final String SQL_LIKE_LEFT = "LikeLeft";

    /**
     * 右模糊
     */
    public static final String SQL_LIKE_RIGHT = "LikeRight";

    /**
     * 全模糊
     */
    public static final String SQL_LIKE_ALL = "LikeAll";


    public static  final String SQL_EMPTY=" ";

    /**
     * 大于
     */
    public static final String SQL_GREATER = ">";

    /**
     * 大于等于
     */
    public static final String SQL_GREATER_EQUAL = ">=";

    /**
     * 小于
     */
    public static final String SQL_LESS = "<";

    /**
     * 小于等于
     */
    public static final String SQL_LESS_EQUAL = "<=";

    /**
     * 等于
     */
    public static final String SQL_EQUAL = "=";

    /**
     * 包含
     */
    public static final String SQL_IN = " in ";

    /**
     * like关键字
     */
    public static final String SQL_LIKE = " like ";


    /**
     * %关键字
     */
    public static final String SQL_PERCENTAGE = "%";

    /**
     * 插入关键字
     */
    public static final String SQL_INSERT = "insert into ";

    /**
     * 删除关键字
     */
    public static final String SQL_DELETE = "delete from ";

    /**
     * 左括号
     */
    public static final String SQL_LEFT_BRACES = "(";

    /**
     * 右括号
     */
    public static final String SQL_RIGHT_BRACES = ")";

    /**
     * 单引号
     */
    public static final String SQL_SINGLE_QUOTES = "'";

    /**
     * as
     */
    public static final String SQL_AS = " as ";

    /**
     * as
     */
    public static final String SQL_AND = " and ";

    /**
     * update
     */
    public static final String SQL_UPDATE = " update ";


    /**
     * set
     */
    public static final String SQL_SET = " set ";

    /**
     * select
     */
    public static final String SQL_SELECT = " select ";


    /**
     * from
     */
    public static final String SQL_FROM = " from ";

    /**
     * where
     */
    public static final String SQL_WHERE = " where ";

    /**
     * or
     */
    public static final String SQL_OR = " or ";

    /**
     * ,
     */
    public static final String SQL_COMMA = ",";


    /**
     * values
     */
    public static final String SQL_VALUES = " values  ";

    /**
     * 1=1
     */
    public static final String SQL_ONE_ONE = " 1=1 ";

    /**
     * 1=2
     */
    public static final String SQL_ONE_TWO = " 1=2 ";

    /**
     * on
     */
    public static final String SQL_ON=" on ";

   
    /**
     * left join
     */
    public static final String SQL_LEFT_JOiN=" left join ";

    /**
     * right join
     */
    public static final String SQL_RIGHT_JOiN=" right join ";


    /**
     * .
     */
    public static final String SQL_DOT=".";
  
    /**
     * 作为分隔符.
     */
    public static final String SPLIT_SQL_DOT="\\.";
}

4.2添加Tools工具类

生成动态SQL语句实现类

/**
 * @author zhangjianshan on 2020-11-25
 */
public class Tools {
   
    public final static ConcurrentHashMap haveColumnFieldConcurrentHashMap = new ConcurrentHashMap();

    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值