private static final Log log = LogFactory.getLog(JPASupport.class);
private static final long serialVersionUID = 1L;
/*
* 用于存放POJO的列信息
*/
private transient static Map<Class<? extends JPASupport>, List<String>> columnMap = new HashMap<Class<? extends JPASupport>, List<String>>();
/**
* 获取POJO对应的表名
* 需要POJO中的属性定义 @Table(name)
*
* @return String
*/
public String tableName()
{
log.debug("loading JAPSupport method tableName..");
Table table = this.getClass().getAnnotation(Table.class);
if (null != table)
{
return table.name();
}
else
{
throw new RuntimeException("undefine POJO @Table, need Tablename(@Table)..");
}
}
/**
* 获取POJO对应的主键名称
* 需要POJO中的属性定义 @Id
*
* @return String
*/
public String id()
{
log.debug("loading JAPSupport method id..");
log.debug(this.getClass().getName());
for (Field field : this.getClass().getDeclaredFields())
{
if (field.isAnnotationPresent(Id.class))
{
return field.getName();
}
}
throw new RuntimeException("undefine POJO @Id..");
}
/**
* 用于计算类定义
* 需要POJO中的属性定义 @Column(name)
*/
public void caculationColumnList()
{
if (columnMap.containsKey(this.getClass()))
{
return;
}
Field[] fields = this.getClass().getDeclaredFields();
List<String> columnList = new ArrayList<String>(fields.length);
for (Field field : fields)
{
if (field.isAnnotationPresent(Column.class))
{
columnList.add(field.getName());
}
}
columnMap.put(this.getClass(), columnList);
}
/**
* 获取用于WHERE的 有值字段表
* @return List
*/
public List<WhereColumn> returnWhereColumnsName()
{
Field[] fields = this.getClass().getDeclaredFields();
List<WhereColumn> columnList = new ArrayList<WhereColumn>(fields.length);
for (Field field : fields)
{
if (field.isAnnotationPresent(Column.class) && !isNull(field))
{
columnList.add(new WhereColumn(field.getName(),field.getGenericType().equals(String.class)));
}
}
return columnList;
}
/**
* Where条件信息
*/
public class WhereColumn
{
public String name;
public boolean isString;
public WhereColumn(String name, boolean isString)
{
this.name = name;
this.isString = isString;
}
}
/**
* 用于获取Insert的字段累加
* @return String
*/
public String returnInsertColumnsName()
{
StringBuilder sb = new StringBuilder();
List<String> list = columnMap.get(this.getClass());
int i = 0;
for (String column : list)
{
if (isNull(column))
{
continue;
}
if (i++ != 0)
{
sb.append(',');
}
sb.append(column);
}
return sb.toString();
}
分享到:
相关推荐
在本场景中,“仿照jpa/Hibernate通过反射导入Excel”指的是利用反射机制来实现类似JPA或Hibernate的数据导入功能,将Excel文件中的数据转换为Java对象并存储到数据库中。 首先,我们需要理解JPA和Hibernate。JPA是...
然而,需要注意的是,由于Java的反射机制和代理对象的限制,延迟加载在某些情况下可能无法工作,比如在没有JPA上下文的情况下直接访问实体的关联属性。 **关系维护** JPA提供了两种方式来维护一对多关系:`...
本文将深入探讨如何利用反射机制来实现一个简单的持久层工具类,以供学习和参考。 反射是Java提供的一种强大的动态类型特性,它允许我们在运行时检查类的信息,包括类名、属性、方法等,并能够动态地创建对象和调用...
- 通过反射机制,可以获取类、字段、方法等上的注释。例如,`getDeclaredAnnotations()` 返回所有声明的注释,包括从父类继承的;`getAnnotations()` 返回可见的注释,不包括继承的;`getAnnotation(注释名.class)`...
Java反射是Java语言提供的一种强大的机制,它允许我们在运行时检查和操作类、接口、字段和方法等。本文将深入剖析Java反射的概念及其在实际开发中的应用。 首先,我们需要了解,反射的核心在于`java.lang.Class`类...
7. **反射机制**: - 描述反射的基本概念,如何通过Class类获取对象信息。 - 使用反射动态调用方法和设置/获取属性值。 - 讨论反射在设计模式(如工厂模式)和动态代理中的应用。 8. **JavaEE技术**: - 介绍...
- 如何通过Class对象获取类的信息,如构造器、方法和字段。 - 动态代理(Dynamic Proxy)的应用,如AOP(面向切面编程)。 6. **设计模式**: - 单例模式、工厂模式、建造者模式、观察者模式等常见设计模式的...
5. **反射机制** - 获取类信息:Class类的用法,如forName()方法。 - 创建对象:newInstance()方法和Constructor的使用。 - 访问成员:获取和修改字段、方法,调用构造器和方法。 6. **JVM** - 类加载机制:...
- Class类:如何通过Class对象获取类信息。 - 动态代理:了解JDK动态代理和CGLIB动态代理。 6. **设计模式**: - 单例模式:饿汉式、懒汉式、双重检查锁定和静态内部类实现。 - 工厂模式:简单工厂、工厂方法和...
8. **反射机制**: - Class类:获取类信息,动态创建对象。 - 构造器、方法、字段的反射调用。 9. **设计模式**: - 常见的23种设计模式,如单例、工厂、观察者、装饰者模式等。 10. **JVM**: - 类加载机制:...
- Class类:知道如何通过Class对象获取类的信息,动态创建对象。 - 构造函数、方法和字段的反射调用:理解如何在运行时动态访问和修改类的成员。 7. **JVM** - 类加载机制:了解类加载器的工作原理,双亲委派...
- 反射API允许程序在运行时动态地获取类的信息并操作对象。 - 注解(Annotation)提供了一种元数据机制,用于在代码中添加额外的信息,如Spring框架中的@Component。 10. **Java教程** - "The Java Tutorial"是...
- 反射机制:动态获取类信息,创建对象,调用方法,修改属性,以及反射在设计模式中的应用。 - 注解:元数据的使用,自定义注解,以及使用反射读取注解信息。 6. **设计模式**: - 常见设计模式:单例、工厂、...
4. **反射机制** - 如何通过反射获取类信息,创建对象,调用方法。 - 反射在动态代理、配置文件加载等场景的应用。 5. **泛型** - 泛型的基本使用,通配符,类型擦除等概念。 - 泛型在集合和自定义类中的应用。...
- 反射的基本用法,如Class类,Constructor、Method、Field对象的获取与使用。 - 注解的定义、使用,以及运行时注解的处理。 8. **网络编程** - TCP与UDP的区别,Socket编程的基本步骤。 - HTTP协议的基本概念...
7. **反射机制** - 反射的应用:动态获取类信息,创建对象,调用私有方法等。 - Class类:如何通过Class对象进行类的操作。 8. **设计模式** - 常见设计模式:单例模式、工厂模式、装饰器模式、观察者模式等。 ...
- **反射**:理解反射机制,如何在运行时动态获取类信息并进行操作。 - **注解(Annotation)**:了解注解的基本用法,以及如何自定义注解。 4. Java API深入 - **IO/NIO**:深入学习Java的I/O系统,包括NIO(非...
- 在运行时获取类的信息,创建和调用对象的方法。 - 动态代理,实现运行时接口的动态实现。 11. **Java虚拟机(JVM)**: - JVM是Java程序的运行环境,负责解释执行字节码。 - 垃圾回收机制,自动管理内存。 -...
8. **反射机制**: - Class类:动态获取类信息,创建对象,调用方法。 - 构造器、方法、字段的反射操作。 9. **设计模式**: - 常见的23种设计模式:单例、工厂、观察者、装饰者、适配器、代理等。 10. **JVM...