public class Test {
public static void main(String[] args) throws Exception {
Filter f1 = new Filter();
f1.setId(3);//查询id为3的客户
Filter f2 = new Filter();
f2.setEmail("123@qq.com, 888@163.com, 456@126.com");//查询邮箱任一的客户
Filter f3 = new Filter();
f3.setMobile("18798765432");//查询电话为
Test t = new Test();
String sql1 = t.query(f1);
String sql2 = t.query(f2);
String sql3 = t.query(f3);
System.out.println(sql1);
System.out.println(sql2);
System.out.println(sql3);
}
public String query(Filter filter) throws Exception {
//1、拿到类的实例
Class c = filter.getClass();
boolean b = c.isAnnotationPresent(Table.class);
if (!b){
return null;
}
StringBuilder sb = new StringBuilder();
//2、获取注解的实例
Table t = (Table)c.getAnnotation(Table.class);
sb.append(" select * from ").append(t.value()).append(" where 1=1 ");
//3、遍历所有的字段
Field[] fArrays = c.getFields();
//4、开始处理每个字段
for (int i=0;i<fArrays.length;i++){
//4.1 获取到字段名
boolean fExist = fArrays[i].isAnnotationPresent(Column.class);
if (!fExist)
continue;
String fieldName = fArrays[i].getName();
Column column = fArrays[i].getAnnotation(Column.class);
String cName = column.value();
//4.2 拿到字段的值
String getMethodName = "get"+cName.substring(0,1).toUpperCase()+cName.substring(1);
Method getMethod = c.getMethod(getMethodName);
Object fieldValue = getMethod.invoke(getMethodName);
//4.3 拼装sql
if(fieldValue==null||(fieldValue instanceof Integer && (Integer)fieldValue==0))
continue;
sb.append(" and ").append(fieldName);
if (fieldValue instanceof String) {
if(((String) fieldValue).contains(",")){
String[] fv = ((String) fieldValue).split(",");
sb.append(" in( ");
for (String f : fv){
sb.append("'").append(f).append("',");
}
sb.deleteCharAt(fv.length-1);
sb.append(")");
}else
sb.append(" = ").append("'").append(fieldValue).append("'");
} else
sb.append(" = ").append(fieldValue);
}
return sb.toString();
}
}
@Table("filter")
public class Filter {
@Column("id")
private int id;
@Column("u_uname")
private String userName;
@Column("u_nname")
private String nickName;
@Column("u_age")
private int age;
@Column("u_city")
private String city;
@Column("u_email")
private String email;
@Column("u_mobile")
private String mobile;
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;
}
}