J2EE之java自定义注解在项目中的使用
2016-10-27 15:19
288 查看
J2EE之java自定义注解在项目中的使用
源代码:
Filter.java:package com.imooc.test; @Table("user")//表名 public class Filter { @Column("id")//数据名 private int id; @Column("user_name")//数据名 private String userName; @Column("nick_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; } }
Table.java:
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.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table { String value(); }
Column.java:
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(); }
Test.java:
package com.imooc.test; import java.lang.reflect.Field; import java.lang.reflect.Method; import javax.swing.plaf.basic.BasicBorders.SplitPaneBorder; public class Test { public static void main(String[] args) { Filter f1=new Filter(); f1.setId(10);//查询id为10的用户 Filter f2=new Filter(); f2.setUserName("lucy");//模糊查询用户名为lucy的用户 f2.setId(18); Filter f3=new Filter(); f3.setEmail("liu@sina.com,77777@qq.com");//查询邮箱为其中任意一个的用户 String sql1=query(f1); String sql2=query(f2); String sql3=query(f3); System.out.println(sql1); System.out.println(sql2); System.out.println(sql3); } private static String query(Filter f){ StringBuffer sb=new StringBuffer(); //1.获取到class Class c=f.getClass(); //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(); //4.2拿到字段值 String fieldName=field.getName(); String getMethodName="get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); Object fieldValue=null; try { Method getMethod=c.getMethod(getMethodName); fieldValue=getMethod.invoke(f); } catch (Exception e) { e.printStackTrace(); } //4.3拼装sql if(fieldValue==null||(fieldValue instanceof Integer && (Integer)fieldValue==0)){ continue; } sb.append(" and ").append(fieldName); 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("'").append(","); } sb.deleteCharAt(sb.length()-1); sb.append(")"); }else{ sb.append("=").append("'").append(fieldValue).append("'"); } }else if(fieldValue instanceof Integer){ sb.append("=").append(fieldValue); } return sb.toString(); } return null; } }
相关文章推荐
- J2EE项目使用自定义注解实现基于SpringMVC + Mybatis + Mysql的读写分离
- Java Annotation 注解的介绍和使用 自定义注解
- Java自定义注解的定义与使用
- Spring依赖注入——java项目中使用spring注解方式进行注入
- 如何使用java自定义注解?demo
- 关于打包自定义标签,并导入项目使用时,出现java.lang.NoClassDefFoundError: JspException异常,解决方法和注意事项!
- Java注解(自定义方法注解使用及测试)
- java --自定义注解的使用
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
- java 自定义注解使用
- java 自定义注解使用
- JAVA_WEB项目之三大框架中不使用HibernateTemplate而使用SessionFactory以及如何使用注解
- java源代码加密+使用proguard混淆java web项目代码+自定义Classloader
- Java自定义注解Annotation的使用
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
- [原创]Java使用反射及自定义注解实现对象差异性比较
- java自定义注解及注解使用(注解学习一)
- mybatis对java自定义注解的使用——入门篇
- java自定义注解及注解使用