我這邊遍歷字段時候,判斷各字段是否有@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("liu@sina.com,?zh@163.com,?xie@qq.com");//查詢?yōu)槠渲腥我庖粋€的用戶 ????????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注解的
設置錯了