使用Javaxa0annotation和反射…

2023-05-22


这种情况在日常开发中会遇到:
多种类型的对象需要保存在数据库中,每种类型的对象都要建立一个表格,创建表格时的字段、检索号码、字段类型都要一一对应,
如果存储在数组中,当需要调整字段时,需要更改数组。第一,很繁琐;第二,编号容易出错,导致程序运行错误;第三,很难重用代码。
为解决以上几个问题,在实践探索中想出了通过annotation解决的办法。
其原理是:
创建表时:需要表名、字段名、字段类型
存储数据时:需要表名、字段名、字段对应数值。
获取数据时:需要表名、字段检索、存储值变量
只需提供上述操作所需的信息,即可操作。这些数据中的一些可以通过类信息获得,而另一些可以通过annotation传输。

创建annotation类,只要这个annotation类修饰的成员变量被认为是需要保存在表格中的。


代码Java





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"这是一个自己的协议,当检查到这个字符串时,自动使用变量名作为字段名,否则使用指定名称作为字段名。


建立一个要保存在数据库中的普通类别:


代码Java



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使用annotation标记的_default,并且都使用了初始值,那么在表格中就会建立一个名为field_all这个变量值存储在_default字段中。


会员变量field_specified_primary用annotation标注_key,并指定为主key,不能为空,并指定了其他字段的specified_field_name。


成员变量not_db如果没有标注_field,则不会被存储。


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


3.1 创建表格:


代码Java


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

本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com