zoukankan      html  css  js  c++  java
  • 注解Demo

     1 //Java中提供了四种元注解,专门负责注解其他的注解,分别如下
     2 16 
     3 17  //@Retention元注解,表示需要在什么级别保存该注释信息(生命周期)。可选的RetentionPoicy参数包括:
     4 18  //RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉
     5 19  //RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)
     6 20  //RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息
     7 21 
     8 22  //@Target元注解,默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括
     9 23  //ElementType.CONSTRUCTOR: 构造器声明
    10 24  //ElementType.FIELD: 成员变量、对象、属性(包括enum实例)
    11 25  //ElementType.LOCAL_VARIABLE: 局部变量声明
    12 26  //ElementType.METHOD: 方法声明
    13 27  //ElementType.PACKAGE: 包声明
    14 28  //ElementType.PARAMETER: 参数声明
    15 29  //ElementType.TYPE: 类、接口(包括注解类型)或enum声明
    16 30 
    17 31  //@Documented将注解包含在JavaDoc中
    18 32 
    19 33  //@Inheried允许子类继承父类中的注解
    1 @Inherited
    2 @Documented
    3 @Retention(RetentionPolicy.RUNTIME)
    4 @Target(ElementType.TYPE)
    5 public @interface TableName {
    6     String value();
    7 }
    View Code
    1 @Documented
    2 @Inherited
    3 @Retention(RetentionPolicy.RUNTIME)
    4 @Target(ElementType.FIELD)
    5 public @interface FieldProperty {
    6     String value();
    7     boolean quote() default true;
    8 }
    View Code
    1 public interface Model {
    2 
    3 }
    View Code
     1 @TableName("T_USER")
     2 public class User implements Model{
     3     @FieldProperty("ID")
     4     private String id;
     5     @FieldProperty("NAME")
     6     private String name;
     7     public final String getId() {
     8         return id;
     9     }
    10     public final void setId(String id) {
    11         this.id = id;
    12     }
    13     public final String getName() {
    14         return name;
    15     }
    16     public final void setName(String name) {
    17         this.name = name;
    18     }
    19     
    20 }
    View Code
     1 public class SQLUtil {
     2     public static void main(String[] args) {
     3         User user = new User();
     4         user.setId("001");
     5         user.setName("wzq");
     6         insert(user);
     7     }
     8 
     9     @SuppressWarnings("unchecked")
    10     public static <T extends Model> void insert(T t) {
    11         Class<T> clz = (Class<T>) t.getClass();
    12         if (clz.isAnnotationPresent(TableName.class)) {
    13             // 表名
    14             String tableName = clz.getAnnotation(TableName.class).value();
    15             // 字段名
    16             Field[] flds = clz.getDeclaredFields();
    17             String[] fields = new String[flds.length];
    18             // 字段值
    19             String[] values = new String[flds.length];
    20             for (int i = 0; i < flds.length; i++) {
    21                 Field fld = flds[i];
    22                 fld.setAccessible(true);
    23                 // String fields[i] =
    24                 // fld.getAnnotation(FieldProperty.class).value();
    25                 fields[i] = fld.getAnnotation(FieldProperty.class).value();
    26                 try {
    27                     values[i] = (String) fld.get(t);
    28                 } catch (IllegalArgumentException e) {
    29                     e.printStackTrace();
    30                 } catch (IllegalAccessException e) {
    31                     e.printStackTrace();
    32                 }
    33             }
    34             String sql = "insert into " + tableName + "(" + join(fields, ',')
    35                     + ")values(" + join(values, ',') + ')';
    36             System.out.println(sql);
    37         }
    38     }
    39 
    40     public static final String join(Object[] arrs, char symbol) {
    41         if (arrs == null) {
    42             return "";
    43         }
    44         StringBuffer sb = new StringBuffer();
    45         for (int i = 0; i < arrs.length; i++) {
    46             Object obj = arrs[i];
    47             sb.append(obj);
    48             if (i != arrs.length - 1) {
    49                 sb.append(symbol);
    50             }
    51         }
    52         return sb.toString();
    53     }
    54 }
    View Code
  • 相关阅读:
    c++之单链表
    c++之变量的生存期及可见性
    c++之结构体-结构数组排序
    c++之递归函数
    c++之指针练习
    C++之面向对象之构造函数和拷贝构造方法,以及析构方法
    C++之命名空间
    C++之面向对象之对象的使用
    Hadoop RPC实现
    BP(商业计划书写)
  • 原文地址:https://www.cnblogs.com/wangziqiang/p/3766234.html
Copyright © 2011-2022 走看看