麻了一一一
2018-12-18 12:00
/**********************Filter*********************/
package com.fish.test;
@Table("user")
public class Filter {
@Column("id")
private int id;
@Column("user_name")
private String userName;
@Column("nick_name")
private String nickName;
@Column("age")
private int age;
@Column("city")
private String city;
@Column("email")
private String email;
@Column("mobile")
private String mobile;
public Filter() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
/*********************Test**********************/
package com.fish.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
Filter f1 = new Filter();
f1.setId(10);//查询id为10的用户
Filter f2 = new Filter();
f2.setUserName("Lucy");//模糊查询用户名为Lucy的用户
Filter f3 = new Filter();
f3.setEmail("liu@sina.com, zh@163.com, xie@qq.com");//查询为其中任意一个的用户
String sql1 = query(f1);
String sql2 = query(f2);
String sql3 = query(f3);
System.out.println(sql1);
System.out.println(sql2);
System.out.println(sql3);
}
private static String query(Filter f) {
StringBuilder sb = new StringBuilder();
//1、获取到class
Class c = f.getClass();
//2、获取到table的名字
boolean exists = c.isAnnotationPresent(Table.class);
if (!exists) {
return null;
}
Table t = (Table)c.getAnnotation(Table.class);
String tableName = t.value();
sb.append("select*from").append(tableName).append("where 1=1");
//3.遍历所有的字段
Field[] fArray = c.getDeclaredFields();
for (Field field : fArray) {
//4.处理每个字段对应的值
//4.1获取字段的名
boolean fExists = field.isAnnotationPresent(Column.class);
if(!fExists) {
continue;
}
Column column = field.getAnnotation(Column.class);
String columnName = column.value();
//4.2、拿到字段的值
String fieldName = field.getName();
String getMethodName = "get" +
fieldName.substring(0, 1).toUpperCase() +
fieldName.substring(1);
Object fieldValue = null;
try {
Method getMethod = c.getMethod(getMethodName);
fieldValue = (String) getMethod.invoke(f);
} catch (Exception e) {
e.printStackTrace();
}
//4.3、拼装SQL
sb.append("and").append(fieldName).append("=").append(fieldValue);
}
return sb.toString();
}
}下面是我debug信息,找了好久都找不出来,哪位同学帮我看看啊,不胜感激

猜测是你@Column注解的
@Retention(RetentionPolicy.RUNTIME)
设置错了
全面解析Java注解
127303 学习 · 111 问题
相似问题