Mybatis通用接口-基于Provider

新项目的话建议使用Mybatis-plus会好点

1、创建实体类注解

/****
 * 表名
 * @author
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface TableName {

    String value() default "";
    /***
     * 别名 
     */
    String alias() default "";
}
/**
 * 表主键
 * @author
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableId {
    String value() default "";
}
public enum FieldStrategy {
    IGNORED,
    NOT_NULL,
    NOT_EMPTY,
    DEFAULT,
    NEVER;

    private FieldStrategy() {
    }
}
import java.lang.annotation.*;

/****
 * 实体属性注解
 *@author chenzhongchao
 *@date 2024/9/6
 *@time 11:09
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableField {
    /**
     * 数据库字段名
     */
    String value() default "";
    FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;
    /**
     * 字段是否存在
     */
    boolean exist() default true;
    FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;
    FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;
    /**
     * jdbc类型
     */
    JdbcType jdbcType() default JdbcType.UNDEFINED;
}

2、创建Mapper基类

/****
 * 通用mapper基类,采用Provider方式省略xml编写sql,复杂性sql请自行编写xml
 * 实体必须有@TableName注解
 * 属性必须有@TableField注解
 * 否则默认类名、属性名作为表名列名
 *@author
 */
public interface BaseMapper<T> {
    /****
     * 根据实体新增数据,为空的字段不处理
     *@param var1 实体
     *@return 影响行数
     */
    @InsertProvider(type = InsertSqlProvider.class, method = "sql")
    int insert(T var1);
    /**
     * 根据主键查询
     * @param var1 主键
     * @return  实体
     */
    @SelectProvider(type = SelectByPrimarySqlProvider.class, method = "sql")
    T selectByPrimaryKey(String var1);
    /**
     * 根据实体查询列表(非空属性作为条件,只做等于,复杂请写xml)
     * @param var1 实体
     * @return  实体列表
     */
    @SelectProvider(type = SelectListSqlProvider.class, method = "sql")
    List<T> selectList(T var1);
    @UpdateProvider(type = UpdateSqlProvider.class, method = "sql")
    int updateByPrimaryKey(T var1);

    @DeleteProvider(type = DeleteSqlProvider.class, method = "sql")
    int deleteByPrimaryKey(String var1);
   

}

3、实体类处理

public class TableInfo {

    /**
     * 表名
     */
    private String tableName;
    /**
     * 表名
     */
    private String tableAliasName;
    /**
     * 实体类型field
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值