JAVA注解的实际应用--生成sql语句

来源:互联网 发布:js 当前页面url 编辑:程序博客网 时间:2024/05/16 15:27

what:
该程序实现了sql查询语句的生成(数据的持久化层)

1)UaerBean(存储的数据)

@Table("user")public class UserBean {    @Column("name")    private String name;    @Column("age")    private int age;    @Column("email")    private String email;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }}

2)produce_sql类实现查询,生成sql语句

public class produce_sql {    public static void main(String[] args)    {        UserBean user1 = new UserBean();        user1.setName("tom"); //查询name==tom        UserBean user2 = new UserBean();        user2.setAge(20); //查询age==20        UserBean user3 = new UserBean();        user3.setEmail("tom@126.com"); //查询email=="tom@126.com"        UserBean user4 = new UserBean(); //查询全部        String sql1 = query(user1);        String sql2 = query(user2);        String sql3 = query(user3);        String sql4 = query(user4);        System.out.println(sql1);        System.out.println(sql2);        System.out.println(sql3);        System.out.println(sql4);    }    public static String query(UserBean user)    {        String src = "";        //注解的解析1.使用类加载器加载类        Class c = user.getClass();        //2找到注解        boolean isExist = c.isAnnotationPresent(Table.class);        if(!isExist)        {            return null;        }        //3拿到注解实例        Table table = (Table)c.getAnnotation(Table.class);        String tableName = table.value();        src += "select * from " + tableName + " where 1=1";        Field[] fields = c.getDeclaredFields();        for (Field field : fields) {            boolean isFExist = field.isAnnotationPresent(Column.class);            if(!isFExist)            {                continue;            }            Column column = field.getAnnotation(Column.class);            String columnName = column.value();            String fieldName  = field.getName();            String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);            Object fieldValue = "";            try {                Method method = c.getMethod(getMethodName);  //通过get方法获取字段的值,此处需要使用反射,因为注解在运行时加载                fieldValue = method.invoke(user);            } catch (Exception e) {                e.printStackTrace();            }            if(fieldValue == null || fieldValue instanceof Integer && (Integer)fieldValue == 0)            {                continue;            }            if(fieldValue instanceof String)            {                src += " and " + columnName + "= \'" + fieldValue + "\'";            }            else{                src += " and " + columnName + "=" +fieldValue;            }        }        return src;    }}

3)运行结果
这里写图片描述

0 0
原创粉丝点击