新项目的话建议使用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