JAVA注解的实际应用--生成sql语句
2017-02-21 22:09
489 查看
what:
该程序实现了sql查询语句的生成(数据的持久化层)
1)UaerBean(存储的数据)
2)produce_sql类实现查询,生成sql语句
3)运行结果
该程序实现了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)运行结果
相关文章推荐
- JAVA自定义注解实现SQL语句自动生成DEMO(2)
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- JAVA自定义注解实现SQL语句自动生成DEMO
- Java注解2--解析注解与注解反射生成SQL语句
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- 注解,泛型,反射的小应用:生成增删改查SQL的语句
- Java注解(四)——注解反射生成SQL语句
- java注解实例-反射生成sql
- Java自动生成mybatis更新sql语句
- [置顶] mybatis mapper.xml数据库映射生成java实体,增删改查sql语句
- Java生成 sql查询语句 通用方法(带排序/分页)(未测试)
- java 通过注解 生成sql的工具类
- 使用基于注解的mybatis时,利用反射和注解生成sql语句
- 实习:java集合应用和sql语句
- MyBatis注解应用之动态SQL语句
- php面向对象之-魔术方法在框架中的应用(自动生成sql语句)-127
- Java注解的实际应用案例讲解