All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.org.atool.fluent.mybatis.metadata.TableMetaHelper Maven / Gradle / Ivy

There is a newer version: 1.9.9
Show newest version
package cn.org.atool.fluent.mybatis.metadata;

import cn.org.atool.fluent.common.kits.KeyMap;
import cn.org.atool.fluent.mybatis.annotation.FluentMybatis;
import cn.org.atool.fluent.mybatis.annotation.TableField;
import cn.org.atool.fluent.mybatis.annotation.TableId;
import cn.org.atool.fluent.mybatis.exception.FluentMybatisException;
import cn.org.atool.fluent.mybatis.utility.MybatisUtil;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static cn.org.atool.fluent.mybatis.If.isBlank;

/**
 * 

* 实体类反射表辅助类 *

* * @author darui.wu */ @SuppressWarnings({"rawtypes", "UnusedReturnValue"}) @Slf4j public class TableMetaHelper { /** * 储存反射类表信息 * Key: entity class */ private static final KeyMap TABLE_INFO_CACHE = new KeyMap<>(); /** *

* 获取实体映射表信息 *

* * @param entityClass 反射实体类 * @return 数据库表反射信息 */ public static TableMeta getTableInfo(Class entityClass) { if (!TABLE_INFO_CACHE.containsKey(entityClass)) { initTableInfo(entityClass); } return TABLE_INFO_CACHE.get(entityClass); } /** *

* 实体类反射获取表信息【初始化】 *

* * @param clazz Entity实体类 */ synchronized static void initTableInfo(Class clazz) { if (!TABLE_INFO_CACHE.containsKey(clazz)) { TableMeta tableMeta = new TableMeta(clazz); /* 初始化表名相关 */ initTableName(clazz, tableMeta); /* 初始化字段相关 */ initTableFields(clazz, tableMeta); TABLE_INFO_CACHE.put(clazz, tableMeta); } } /** *

* 初始化 表数据库类型,表名,resultMap *

* * @param clazz 实体类 * @param tableMeta 数据库表反射信息 */ private static boolean initTableName(Class clazz, TableMeta tableMeta) { /* 数据库全局配置 */ FluentMybatis fluentMyBatis = clazz.getAnnotation(FluentMybatis.class); if (fluentMyBatis == null) { return false; } String tableName = fluentMyBatis.table(); if (isBlank(tableName)) { tableName = MybatisUtil.tableName(clazz.getSimpleName(), fluentMyBatis.prefix(), fluentMyBatis.suffix()); } tableMeta.setTableName(tableName); return true; } /** *

* 获取该类的所有属性列表 * 初始化 表主键,表字段 *

* * @param clazz 实体类 * @param tableMeta 数据库表反射信息 */ private static void initTableFields(Class clazz, TableMeta tableMeta) { List fields = MybatisUtil.getFieldList(clazz); List fieldList = new ArrayList<>(); for (Field field : fields) { TableId tableId = field.getAnnotation(TableId.class); if (tableId == null) { TableField tableField = field.getAnnotation(TableField.class); fieldList.add(new TableFieldMeta(field, tableField)); } else if (tableMeta.getPrimary() == null) { tableMeta.setPrimary(new TablePrimaryMeta(field, tableId)); } else { throw FluentMybatisException.instance("There must be only one, Discover multiple @TableId annotation in %s", clazz.getName()); } } /* 字段列表,不可变集合 */ Collections.sort(fieldList); tableMeta.setFields(Collections.unmodifiableList(fieldList)); /* 未发现主键注解,提示警告信息 */ if (tableMeta.getPrimary() == null) { log.warn(String.format("Warn: Could not find @TableId in Class: %s.", clazz.getName())); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy