首页 > 编程 > Java > 正文

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

2019-11-08 00:50:13
字体:
来源:转载
供稿:网友

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)运行结果 这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表