标签:c style class blog code java
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 }
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 }
1 public interface Model { 2 3 }
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 }
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 }
标签:c style class blog code java
原文地址:http://www.cnblogs.com/wangziqiang/p/3766234.html