关闭

JAVA注解01

40人阅读 评论(0) 收藏 举报
分类:
package com.annotation.test1;

import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Person {
    String name();
    int age();

}


package com.annotation.test1;

@Person(name = "xingoo", age = 25)
public class Test {

    public static void main(String[] args) {
        Test.print(Test.class);
        Test.print();
    }

    public static void print(Class c) {
        System.out.println(c.getName());
        // java.lang.Class的getAnnotation方法,如果有注解,则返回注解。否则返回null
        Person person = (Person) c.getAnnotation(Person.class);

        if (person != null) {
            System.out.println("name:" + person.name() + ",age:" + person.age());
        } else {
            System.out.println("person unknow!");
        }

    }
    
    public static void print() {
        System.out.println("====================================");
        Class c = Test.class;
        if(c.isAnnotationPresent(Person.class)){
            Person person = (Person) c.getAnnotation(Person.class);
            if(person != null){
                System.out.println("name:" + person.name() + ",age:" + person.age());
            }else{
                 System.out.println("null");
            }
        }else {
            System.out.println("person unknow!");
        }

    }
}



package com.annotation.test2;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Table {
    String value() default "";

}



package com.annotation.test2;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Inherited
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
    String value() default "";
}



package com.annotation.test2;

@Table("tb_test")
public class TestDto {
    @Deprecated
    private String tt;
    @Column("_id")
    private String id;
    @Column("username")
    private String name;
    
    public TestDto(String id,String name){
        super();
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
}


package com.annotation.test2;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * TODO:类功能介绍
 * @version 2016年6月2日上午11:48:11
 * @author wuliu
 */
public class Test {

    public static void main(String[] args) {
        TestDto testDto = new TestDto("123", "34");  
        TestDto testDto1 = new TestDto("123", "test1");  
        TestDto testDto2 = new TestDto("", "test1,test2,test3,test4");  
        String sql = assembleSqlFromObj(testDto);  
        String sql1 = assembleSqlFromObj(testDto1);  
        String sql2 = assembleSqlFromObj(testDto2);  
        System.out.println(sql);  
        System.out.println(sql1);  
        System.out.println(sql2);
    }

    /**
     * 通过注解来组装查询条件,生成查询语句
     * @param obj
     * @return
     */  
    public static String assembleSqlFromObj(Object obj) {
        Table table = obj.getClass().getAnnotation(Table.class);  
        StringBuffer sbSql = new StringBuffer();  
        String tableName = table.value();  
        sbSql.append("select * from " + tableName + " where 1=1 ");  
        Field[] fileds = obj.getClass().getDeclaredFields();  
        for (Field f : fileds) {  
            System.out.println("==============================================");
            String fieldName = f.getName();  
            String methodName = "get" + fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);  
            try {  
                Column column = f.getAnnotation(Column.class);  
                if (column != null) {  
                    Method method = obj.getClass().getMethod(methodName);  
                    String value = (String) method.invoke(obj);  
                    System.out.println(fieldName + "," + methodName + "," + value);
                    if (value != null && !value.equals("")) {  
                        if (!isNum(column.value()) && !isNum(value)) {  
                            // 判断参数是不是 in 类型参数 1,2,3  
                            if (value.contains(",")) {  
                                sbSql.append(" and " + column.value() + " in (" + value + ") ");  
                            } else {  
                                sbSql.append(" and " + column.value() + " like '%" + value + "%' ");  
                            }  
                        } else {  
                            sbSql.append(" and " + column.value() + "=" + value + " ");  
                        }  
                    }  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        return sbSql.toString();  
    }
    
    /**
     * 检查给定的值是不是 id 类型 1.检查字段名称 2.检查字段值
     *  
     * @param target
     * @return
     */  
    public static boolean isNum(String target) {  
        boolean isNum = false;  
        if (target.toLowerCase().contains("id")) {  
            isNum = true;  
        }  
        if (target.matches("\\d+")) {  
            isNum = true;  
        }  
        return isNum;  
    }  
}






0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:44443次
    • 积分:1030
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:56篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论