美文网首页
java注解

java注解

作者: alex_zn | 来源:发表于2018-07-20 17:25 被阅读0次
import DAO.Filter;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main {


    //
    public static void main(String[] args) {
        Main main = new Main();
        main.setup();
    }
    //
    void setup() {

        Filter f1 = new Filter();
        f1.setId("10");
        try {
            String text  = query(f1);
            System.out.println(text);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }


    String query(Filter filter) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {

        StringBuffer stringBuffer = new StringBuffer();
        //获取class
        Class c = filter.getClass();
        boolean isExist = c.isAnnotationPresent(Table.class);
        if (isExist == false) {
            return null;
        }
        Table table = (Table) c.getAnnotation(Table.class);

        String tableName = table.value();
        stringBuffer.append("select * from ").append(tableName).append(" where 1 = 1 ");
        //遍历
        Field[] fields = c.getDeclaredFields();
        for (Field field:fields) {
            boolean iscolum = field.isAnnotationPresent(Column.class);
            if (iscolum == false) {
                continue;
            }

            Column column = field.getAnnotation(Column.class);
            String name = column.value();

            //拿到字段和get方法
            String fieldName = field.getName();
            String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);


            //执行method
            Method getMethod = c.getMethod(getMethodName);
            String fieldValue = (String) getMethod.invoke(filter);
            if (fieldValue == null) {
                continue;
            }

            //拼接sql
            stringBuffer.append(" and ").append(fieldName).append(" = ").append(fieldValue);
        }
        return  stringBuffer.toString();
    }
}

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME) 
@interface Column {
    String value();
}

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Table {

    String value();
}

相关文章

  • 菜鸟学服务端技术----Spirng基础

    注解 Java基础加强总结(一)——注解(Annotation) java中的注解是如何工作的? java 注解 ...

  • 自定义注解

    java annotation基础 java注解分为标准注解和元注解。 标准注解是java为我们提供的预定义的注解...

  • Java注解的使用

    Java注解的使用 参考 廖雪峰java教程 使用注解 什么是注解(Annotation)?注解是放在Java源码...

  • Java原生注解和Spring注解的说明

    注解 java 原生注解 Spring 中的注解 一 Java原生注解 Java注解是在JDK1.5以后引入的新特...

  • Java 注解

    JAVA注解 Java 自带注解(系统注解) @Override 表示重写注解 @Deprecated 表示过时的...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • Java注解学习总结(脑图)

    注解的提取测试:定义注解: 测试注解提取: 参考:《Java编程思想》java注解

  • Java注解

    Java注解(Annotation)详解(一)——概述及JDK自带注解 Java注解(Annotation)详解(...

  • JAVA-注解 Annotation

    JAVA-注解 Annotation sschrodinger 2018/6/4 基本 注解 Java 注解用于为...

  • Java注解简介篇

    摘要 本文详细介绍java注解是什么,如何声明java注解,如何解析java注解。最后介绍JDK提供的几大基本注解...

网友评论

      本文标题:java注解

      本文链接:https://www.haomeiwen.com/subject/repqmftx.html