您的位置:首页 > 编程语言 > Java开发

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 注解