文件路径:
Column的注解
package testQuery;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
String value();
}
Table的注解
package testQuery;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)//生命周期运行时
public @interface Table {
String value();
}
Filter的model
@Table("user")
public class Filter {
@Column("id")
private int id;
@Column("userName")
private String userName;
@Column("nickName")
private String nickName;
@Column("age")
private int age;
@Column("city")
private String city;
@Column("mobile")
private String mobile;
@Column("email")
private String email;
*****set****get*****
Filter2的model
@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;
*****set****get*****
测试testQuery
package testQuery;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
Filter filter1 = new Filter();
filter1.setId(10);//查询id为10的用户
Filter filter2 = new Filter();
filter2.setUserName("lucy");//查询用户名为lucy的用户
filter2.setAge(18);
Filter filter3 = new Filter();
filter3.setEmail("liu@sina.com");//查询邮箱为其中任意一个的用户
String sql1 = query(filter1);
String sql2 = query(filter2);
String sql3 = query(filter3);
System.out.println(sql1);
System.out.println(sql2);
System.out.println(sql3);
Filter2 filter21 = new Filter2();
filter21.setAmount(10);
filter21.setName("技术部");
System.out.println(query(filter21));
}
private static String query(Object f) {
StringBuilder stringBuilder = new StringBuilder();
//获取到class
Class c = f.getClass();
//获取到table的名字
boolean exists = c.isAnnotationPresent(Table.class);
//if exist=false 则返回null
if (!exists) {
return null;
}
Table table = (Table) c.getAnnotation(Table.class);
String tableName = table.value();
stringBuilder.append("select * from").append(tableName).append("where 1=1");
//3.遍历所有的字段
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
//4.处理每个字段对应的sql
//4.1 拿到字段名
boolean fExist = field.isAnnotationPresent(Column.class);
if (!fExist) {
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 = getMethod.invoke(f);
} catch (Exception e) {
e.printStackTrace();
}
//拼装sql
if (fieldValue == null || (fieldValue instanceof Integer && (Integer) fieldValue == 0)) {
continue;
}
stringBuilder.append(" and ").append(fieldName);
if (fieldValue instanceof String) {
if (((String) fieldValue).contains(",")) {
String[] vaules = ((String) fieldValue).split(",");
stringBuilder.append("in(");
for (String v : vaules) {
stringBuilder.append("'").append(v).append("'").append(",");
}
//最后一个的逗号给删掉
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
stringBuilder.append(")");
} else {
stringBuilder.append("=").append("'").append(fieldValue).append("'");
}
} else if (fieldValue instanceof Integer) {
stringBuilder.append("=").append(fieldValue);
}
}
return stringBuilder.toString();
}
}