我這邊遍歷字段時候,判斷各字段是否有@Column注解總是為否,找了一上午沒找出來
/**********************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("[email protected],[email protected],[email protected]");//查詢為其中任意一個的用戶
????????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信息,找了好久都找不出來,哪位同學幫我看看啊,不勝感激

2019-05-12
猜測是你@Column注解的
設置錯了