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
- JAVA注解的实际应用--生成sql语句
- sql语句的实际应用
- Java注解的实际应用案例讲解
- SQL语句实际应用总结
- 注解,泛型,反射的小应用:生成增删改查SQL的语句
- JAVA自定义注解实现SQL语句自动生成DEMO
- Java注解项目实战即模拟Hibenernate生成sql语句
- java注解:完成sql语句的拼接
- Mybatis基于注解形式的sql语句生成
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- 通过反射+注解生成sql语句
- 使用基于注解的mybatis时,利用反射和注解生成sql语句
- MyBatis注解应用之动态SQL语句
- MyBatis注解应用之动态SQL语句
- 生成带图片的二维码,实际应用
- JAVA注解 实现一个简单的sql语句生成器
- 记录
- expect无信任远程批量拷贝文件
- 如何在SpringMVC 的@Controller 层中获取bean
- java注解详解
- ubuntu14.04.1 LTS 64bits较快的更新源
- JAVA注解的实际应用--生成sql语句
- TCP 偶尔出现connection refused
- js中 this 的指向
- Jvm原理剖析与调优之内存结构
- Atitit 遍历文件夹算法 autoit attilax总结
- Rust : 为什么没有lifetime是不行的?
- 中大双日游——GDKOI2017
- ProgressBar的圆形进度和水平进度的使用
- Codeforces 768A Oath of the Night's Watch