JAVA反射 获取JavaBean属性 反射生成HQL语句
1、新建一个Person实体类

2、Shift+Alt+s+r
生成get,set方法

3、新建一个反射获取属性的方法
public <T> void getDomainValue(T entity) {

4、新建方法测试testGetValue反射打印的Person属性

5、修改getDomainValue方法,使其生成HQL语法
这里以查询为例
StringBuffer buffer = new StringBuffer("select * from ");
buffer.append(entity.getClass().getSimpleName());
buffer.append(" 1=1 ");

6、运行testGetValue方法,查看打印情况
打印结果
select * from Person 1=1 and id = 'c96c077a5f0e4b638ed94b52dfb871d7' and name = '张三' and age = 18 and isDelete = false

7、反射关键代码
public <T> void getDomainValue(T entity) {
StringBuffer buffer = new StringBuffer("select * from ");
buffer.append(entity.getClass().getSimpleName());
buffer.append(" 1=1 ");
Field[] fields = entity.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
String fristUpperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
Method method;
Object value = null;
try {
method = entity.getClass().getMethod("get" + fristUpperCase);
value = method.invoke(entity);
if(null != value) {
buffer.append(" and ");
buffer.append(name);
buffer.append(" = ");
if(field.getType() == String.class) {
buffer.append("'");
buffer.append(value);
buffer.append("'");
}else {
buffer.append(value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(buffer.toString());
}