项目已经上传到了github上面,地址:https://github.com/kingzs/kingeasy,有兴趣的伙伴,可以一起开发。
每个实体类的注解,都需要解析出来,才可以使用。那么,就可以定义一个解析类,专门用来存放实体类的注解解析之后的信息,这个类就是解析类。在通用的增删查改方法里面,如果需要用到类的解析信息,只需要到解析类里拿就可以了。解析类的实现代码:
package org.kingeasy.base;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.kingeasy.annotation.ColumnName;
import org.kingeasy.annotation.Immutable;
import org.kingeasy.annotation.Mapping;
import org.kingeasy.annotation.NoDeletion;
import org.kingeasy.annotation.NoRepeat;
import org.kingeasy.annotation.PrimaryKey;
import org.kingeasy.annotation.Search;
import org.kingeasy.annotation.Searches;
import org.kingeasy.annotation.Statistic;
import org.kingeasy.annotation.TableName;
/**
* 解析类
* 一个类对应一个解析类
* 这个解析类,就是把类里的各个注解给解析出来并保存
* 在通用的增删查改方法里面,就是到这个类里拿相应的信息进行操作
*/
public class AnalysisClass {
/**
* 类所对应的表名
* 如果类添加了注解@TableName,则取注解的value作为表名
* 如果没有添加这个注解,则取类的简短名称并全转成小写,作为表名
*/
private String tableName;
/**
* 类的主键字段名
* 也就是类添加了@PrimaryKey的成员变量的变量名
* 现在,暂时只支持一个类,只有一个主键的情况
*/
private String primaryKey;
/**
* 类的主键对应表中的列名
* 也就是@PrimaryKey注解的value值
* 同时,@PrimaryKey注解也可以不添加value值,则默认为空字符串,那么就取字段的名称作为表的列名
*/
private String tablePrimaryKey;
/**
* 类的字段名与表的列名的映射
* 如果字段名添加了@ClomnName注解,则会把注解的value作为值,把字段名作为键,存入fieldColumnMap中
* 如果字段名没有添加这个注解,则键和值都为字段名,存入fieldColumnMap中
* 同时,@PrimaryKey注解的映射,也会存入这个map中
*/
private Map<String, String> fieldColumnMap = new HashMap<>();
/**
* 表的列名与类的字段名的映射
* 与上一个map,只是键和值反过来存而已
*/
private Map<String, String> columnFieldMap = new HashMap<>();
/**
* 不能重复的字段映射
* 只有字段添加了@NoRepeat注解,才会把字段名作为键,字段的value作为值,存入这个map里面
*/
private Map<String, String> noRepeatMap = new HashMap<>();
/**
* 可以修改的字段集合
* 没有添加@Immtable注解的字段,才会加入到这个map里面
*/
private Set<String> modifiableField = new HashSet<>();
/**
* 限制删除的字段映射
* 添加了@NoDeletion注解的字段,字段名作键,注解的value作值,存入这个map
*/
private Map<String, String> noDeletionMap = new HashMap<>();
/**
* 本类查询条件映射
* 这个map只存放当前类里添加的@Search注解
* 以注解的param作为键,以字段对应的表的列名,加上前缀"t0.",再拼接注解的exp,作为值,存入这个map中
* 如果没有param的值,则默认为空字符串,那就以字段的名称作为键存入map中
*/
private Map<String, String> selfSearchExpMap = new HashMap<>();
/**
* 来自于其它类的查询条件映射
* 这个map用于存放所有来自于其它关联的类里的@Search注解的解析数据
* 存放的内容,与本类的查询条件唯一不同的值里的前缀,本类的都以"t0."作为前缀
* 而这里的前缀,以字段在类的定义里的顺序乘以10得到,比如,