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()); }