JAVA注解01

原创 2016年08月29日 09:36:11
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;  
    }  
}






版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Spring In Action-2.1-01-@Component注解

  • 2017年08月31日 21:47
  • 13.59MB
  • 下载

Spring-基于注解的配置[01定义Bean+扫描Bean]

概述 使用注解定义Bean 扫描注解定义的Bean 使用步骤 扫描特定的类 resource-pattern 实例 include-filter exclude-filter过滤子元素的使用 支持...

Spring入门之初学注解01

1.新建Student.javapublic class Student { public void say(){ System.out.println("Student");...

动归DP算法学习笔记 01背包 C++代码注解

01背包问题是动态规划的经典问题, 也是基础问题。 #include #include #include #include #include #include "inputf.h" int...
  • rrrfff
  • rrrfff
  • 2011年08月09日 15:18
  • 3753

java泛型反射注解

  • 2016年08月18日 16:34
  • 6KB
  • 下载

java的注解

  • 2014年12月17日 22:17
  • 1.83MB
  • 下载

04.(Java基础)-01Static关键字的有哪些作用

Static 关键字主要有两个作用:  1.为特定的数据类型或对象分配单一的存储空间,而不用去考虑创建了多少个实例对象,用static修饰的在内存中只有一份它与创建的实例的对象多少没有关...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA注解01
举报原因:
原因补充:

(最多只允许输入30个字)