0
点赞
收藏
分享

微信扫一扫

通过Java annotation以及反射…

在日常开发中会遇到这种情况:
多类对象需要保存到数据库中,每类对象都要创建一个表,创建表时的字段、索引序号、字段类型都要一一对应,
如果保存到数组中,当需要增减字段就要更改数组,一是繁琐,二是很容易搞错序号导致程序运行错误,三是代码复用很难做到。
为了解决上述几点问题,在实践摸索中想出了通过annotation来解决的方法。
其原理是:
创建表时:需要表名、字段名、字段类型
保存数据时:需要表名、字段名、字段对应的值
读取数据时:需要表名、字段索引、保存值的变量
只要在进行以上操作时能提供所需要的信息,那么就能进行操作,这些信息有些可以通过类信息获得,有些则需要通过annotation传入。

1.创建annotation类,只要被此annotation类修饰的成员变量都认为是需要保存到表中的。

Java代码

通过Java annotation以及反射…_字段

 


通过Java annotation以及反射…_字段名_02

通过Java <wbr>annotation以及反射机制实现不同类型通用的数据库访问接口

1.  
2. @Target(ElementType.FIELD)   
3. @Retention(RetentionPolicy.RUNTIME)   
4. public @interface DbField {   
5.    boolean primaryKey() default false;   
6.    boolean notNull() default false;   
7.    String fieldName() default "##default";        
8. }



代码中的"##default"是自己的一个约定,当检测到此字符串时自动用变量名作为字段名,否则用指定的名字作为字段名。

2.创建一个普通的要保存到数据库中的类:

Java代码

通过Java annotation以及反射…_字段

 

通过Java annotation以及反射…_字段名_02

通过Java <wbr>annotation以及反射机制实现不同类型通用的数据库访问接口

1. public class SomeThing {   
2.    @DbField  
3.    public String field_all_default;   
4.       
5.    @DbField (   
6.        primaryKey = true,   
7.        notNull = true,        
8.        fieldName = "specified_field_name"  
9.    )   
10.    public long field_specified_primary_key;   
11.       
12.    @DbField  
13.    public boolean field_boolean;   
14.       
15.    public int not_db_field;   
16. }


public class SomeThing {        @DbField        public String field_all_default;
        
        @DbField (
                primaryKey = true,
                notNull = true,         
                fieldName = "specified_field_name"
        )
        public long field_specified_primary_key;
        
        @DbField
        public boolean field_boolean;
        
        public int not_db_field;
}


在上面的代码中:

成员变量field_all_default被用annotation标注,并都使用了默认值,那么在表中就会创建一个名为field_all_default的字段来保存此变量的值。

成员变量field_specified_primary_key被用annotation标注,并指定了是主key,不能为空,且指定了另外的字段名specified_field_name。

成员变量not_db_field没有被标注,那么就不会被保存。

3.创建一个数据库操作辅助类,在这个类的函数中会读取上面的标注信息,并根据标注信息进行处理。

3.1 创建表格:

Java代码

通过Java annotation以及反射…_字段

 

通过Java annotation以及反射…_字段名_02

1. private void createTbl(SQLiteDatabase db, String tblName, Class

举报

相关推荐

0 条评论