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;  
    }  
}






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

遗传算法解01背包问题(Java)

遗传算法解01背包问题,并给出了完整可运行的java代码
  • liyuming0000
  • liyuming0000
  • 2015年09月12日 16:26
  • 2772

Java字符串与01串的转换

Java字符串与01串的互相转换
  • liuweiyuxiang
  • liuweiyuxiang
  • 2017年04月30日 10:23
  • 829

动态规划解决01背包问题(java实现)

01背包问题与背包问题的区别在于,01背包,物品的选择只有两种一种是拿,另一种是不拿,而背包问题在于,物品可以只取一部分。所以01背包问题不能用贪心算法解决。 以dp[i][j]表示用i种物品,重量为...
  • qq_22222499
  • qq_22222499
  • 2017年04月30日 13:52
  • 1287

动态规划_01背包问题_Java实现

什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案。...
  • ljmingcom304
  • ljmingcom304
  • 2015年12月16日 15:11
  • 5302

01背包问题(回溯法实现,java)

上两天学习的回溯算法,老师让我们回溯法来解决01背包问题, 经过了几天的改改增增,终于实现成功了。 自我感觉回溯算法思想,从左到右,一步一步,能走则走,不能则过! 下面直接贴代码,代码上详细注释...
  • anLA_
  • anLA_
  • 2015年10月30日 19:57
  • 2225

贪心算法_01背包问题_Java实现

什么是贪心算法?是指在对问题进行求解时,总是做出当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所得出的结果仅仅是某种意义上的局部最优解。因此贪心算法不会对所有问题都能得到整体最优解,但对于很...
  • ljmingcom304
  • ljmingcom304
  • 2015年12月15日 09:41
  • 4366

Java语言描述:分支限界法之01背包问题

问题描述: 已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是value[i]。 限制:每种物品只有一件,可以选择放或者不放 问题:在不超过背包容量的情况下,最多能获得...
  • wzq153308
  • wzq153308
  • 2015年06月05日 17:04
  • 2653

动态规划的用法——01背包问题

动态规划的用法——01背包问题   问题主题:著名的01背包问题 问题描述: 有n个重量和价值分别为wi、vi的物品,现在要从这些物品中选出总重量不超过W的物品,求所有挑选方案...
  • luoweifu
  • luoweifu
  • 2014年01月19日 19:10
  • 15973

回溯算法_01背包问题_Java实现

回溯算法也叫试探法,通俗的将就是一个方向的路一直往前走,能走则走,不能走则退回来换一个方向再试。一般的实现步骤是:针对一个问题定义解的空间,至少包含问题的一个最优解;用易于搜索的解空间结构,使得能用回...
  • ljmingcom304
  • ljmingcom304
  • 2015年12月15日 14:15
  • 3463

算法训练 C++ CH08 01

算法训练 C++ CH08 01 时间限制:1.0s 内存限制:256.0MB问题描述   已知一个有理数类Zrf_Ratio,实现如下的操作符重载形式:   friend std::os...
  • ldsh304
  • ldsh304
  • 2016年12月31日 14:58
  • 325
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA注解01
举报原因:
原因补充:

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