Java注解项目实战即模拟Hibenernate生成sql语句
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java注解项目实战即模拟Hibenernate生成sql语句,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5913字,纯文字阅读大概需要9分钟。
内容图文
![Java注解项目实战即模拟Hibenernate生成sql语句](/upload/InfoBanner/zyjiaocheng/476/5389d0f432fd419aac408fa59a58173e.jpg)
package com.imooc.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.lang.model.element.Element; //用作类的注解,生命周期为运行时 一个值 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table { String value(); }
字段 注解的创建
package com.imooc.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /* * 作用域为字段 运行时使用 * */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Column { String value(); }
用户表(类)
package com.imooc.test; @Table("user") public class Filter { @Column("id") private int id; @Column("user_name") private String userName; @Column("user_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; } public void setUserName(String userName) { this.userName = userName; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } }
测试类的创建
package com.imooc.test; @Table("Coder ") public class Coder { @Column("id") private int id; @Column("name") private String userName; @Column("age") private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
sql语句的生成过程
package com.imooc.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test { public static void main(String[] args) { // 代码如何与数据库做映射 Filter f1 = new Filter(); f1.setId(10); Filter f2 = new Filter(); f2.setUserName("lucy"); Filter f3 = new Filter(); f3.setEmail("su@outlook.com,li@qq.com,hehe@163.com"); Coder c1 = new Coder(); c1.setUserName("ruanjianlin"); String sql1 = query(f1); String sql2 = query(f2); String sql3 = query(f3); String sql4 = query(c1); System.out.println(sql1); System.out.println(sql2); System.out.println(sql3); System.out.println(sql4); } private static String query(Object f) { // TODO Auto-generated method stub StringBuilder sb = new StringBuilder(); // 1.获取Class通过类的类类型得到类的详细信息 Class c = f.getClass(); // Java Package.isAnnotationPresent()方法用法实例教程。方法返回true,如果指定类型的注释存在于此元素上, // 否则返回false // 2.获取Table的名字 boolean exists = c.isAnnotationPresent(Table.class); if (!exists) { return null; } Table t = (Table) c.getAnnotation(Table.class); String tableName = t.value(); sb.append("select* from ").append(tableName).append(" where 1=1 "); // 3遍历所有字段 Field[] fArray = c.getDeclaredFields(); for (Field field : fArray) { // 4拿到每个字段对应的sql // 4.1字段名 boolean fExists = field.isAnnotationPresent(Column.class);// 是否存在 // 判断是否存在字段 if (!fExists) { continue; } Column column = field.getAnnotation(Column.class); String columnName = column.value(); Object fieldValue = null; String filedName = field.getName(); // 4.2拿到字段值(先获取字段的get方法) String getMethodName = "get" + filedName.substring(0, 1).toUpperCase() + filedName.substring(1); try { Method getMethod = c.getMethod(getMethodName);// 取得该值 // 反射渠道得到字段值 fieldValue = getMethod.invoke(f); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (fieldValue == null || (fieldValue instanceof Integer && (Integer) fieldValue == 0)) { continue; } //4.3拼装sql sb.append("and ").append(columnName); if (fieldValue instanceof String) { if (((String) fieldValue).contains(",")) { String[] values = ((String) fieldValue).split(","); sb.append(" in("); for (String v : values) { sb.append("‘").append(v).append("‘,"); } sb.deleteCharAt(sb.length() - 1); sb.append(")"); } else { sb.append("= ‘").append(fieldValue).append("‘"); } } else { sb.append("=").append(fieldValue.toString()); } } return sb.toString(); } }
本文出自 “ruanjianlin” 博客,请务必保留此出处http://ruanjianlin.blog.51cto.com/11146685/1900584
Java注解项目实战即模拟Hibenernate生成sql语句
标签:java 注解 hibenernate sql
本文系统来源:http://ruanjianlin.blog.51cto.com/11146685/1900584
内容总结
以上是互联网集市为您收集整理的Java注解项目实战即模拟Hibenernate生成sql语句全部内容,希望文章能够帮你解决Java注解项目实战即模拟Hibenernate生成sql语句所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。