Column.java
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
String value();
}
Filter.java
@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 int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
//省略set get
}
Filter2.java
@Table("department")
public class Filter2 {
@Column("id")
private int id;
@Column("name")
private String name;
@Column("leader")
private String leader;
@Column("amount")
private int amount;
public int getId() {
return id;
}
//省略 set get...
}
Table.java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String value();
}
Test.java
public class Test {
public static void main(String[] args) {
Filter f1 = new Filter();
f1.setId(10);
Filter f2 = new Filter();
f2.setUserName("lucy");
f2.setAge(18);
Filter f3 = new Filter();
f3.setEmail("[email protected],[email protected],tao.163.com");
String sq11 = query(f1);
String sq12 = query(f2);
String sq13 = query(f3);
System.out.println(sq11);
System.out.println(sq12);
System.out.println(sq13);
Filter2 filter2 = new Filter2();
filter2.setAmount(11);
filter2.setName("IT部");
System.out.println(query(filter2));
}
private static String query(Object f){
StringBuilder sb = new StringBuilder();
//获取到class
Class c = f.getClass();
//2 获取到table 的名字
boolean isExist = c.isAnnotationPresent(Table.class);
if(!isExist){
return null;
}
Table t = (Table)c.getAnnotation(Table.class);
String tableName = t.value();
sb.append("select * from ").append(tableName).append(" where 1=1");
//遍历所有字段
Field[] fArray = c.getDeclaredFields();
for(Field field:fArray){
//拿到字段名
boolean fExist = field.isAnnotationPresent(Column.class);
if(!fExist){
continue;
}
Column column = field.getAnnotation(Column.class);
String columnName = column.value();
//拿到字段的值
String filedName = field.getName();
String getMethodName = "get"+filedName.substring(0,1).toUpperCase()+
filedName.substring(1);
Object filedValue= null;
try {
Method getMethod = c.getMethod(getMethodName);
filedValue = getMethod.invoke(f);
}catch (Exception e){
e.printStackTrace();
}
if(filedValue ==null || (filedValue instanceof Integer && (Integer) filedValue==0)){
continue;
}
sb.append(" and ").append(filedName);
if(filedValue instanceof String ){
if(((String)filedValue).contains(",")){
String[] values = ((String)filedValue).split(",");
sb.append(" in (");
for(String v:values){
sb.append("'").append(v).append("'").append(",");
}
sb.deleteCharAt(sb.length()-1);
sb.append(")");
}else {
sb.append("=").append("'").append(filedValue).append("'");
}
}else if(filedValue instanceof Integer){
sb.append("=").append(filedValue);
}
}
return sb.toString();
}
}