文章目录
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();