慕课网——全面解析Java注解(http://www.imooc.com/learn/456) 笔记

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();
    }

}

猜你喜欢

转载自blog.csdn.net/u012687612/article/details/110662549