Android Studio配置greenDao框架详解--说说那些坑

我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。而今天的主角便是 greenDAO,下面,我将详解地介绍如何在 Android Studio 上使用 greenDAO,并结合代码总结一些使用过程中的心得。

一端介绍,我不重复了,都是废话。你既然搜greendao怎么用,肯定知道它是什么,不了解的可以看看这儿的解释,具体的操作还是看我的吧,我会告诉你那些坑。

废话不多说,搞起。

github地址:https://github.com/greenrobot/greenDAO


一、新建项目,在 app/src/main 目录下新建一个与 java 同层级的「java-gen」目录,用于存放由 greenDAO 生成的 Bean、DAO、DaoMaster、DaoSession 等类,在main目录上右键选择new -> Directory创建即可。【声明,此处的java-gen目录名,也可以随便写,附例为证】。

配置当前module下的build.gradle文件:

android {
    。。。。。
    sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/<span style="color: rgb(64, 64, 64); font-family: "Microsoft YaHei", Verdana, sans-serif, SimSun; font-size: 16px; line-height: 28.8px;">java-gen</span>']
        }
    }
}
<pre name="code" class="html">dependencies {
    .....
    compile 'de.greenrobot:greendao:2.1.0'
}

 这部分配置完成。 

二、右键点击project名,新建module, 选择java library,即创建一个纯java项目。包名和类名无所谓。不过类名最好写成xxxDaoGenerator,我的习惯。配置这个module的build.gradle依赖:

dependencies {
    。。。。。
    compile 'de.greenrobot:greendao-generator:2.1.0'
}

接下来编写刚才生成的 xxxDaoGenerator.java类,在这个里面定义数据库和表结构:

public class DkDaoGenerator {
    public static final int DB_VERSION = 1;
    public static final String PACKAGE_NAME = "com.znke.greendao_test";//duke_greendao里面的不包名
    public static final String JAVA_SOURCE = "./app/src/main/duke_greendao";


    public static final String CLASS_NAME_MESSAGE = "Message";//生成消息类名
    public static final String TABLE_NAME_MESSAGE = "tbl_message";// 消息表名

    public static final String TITLE = "title";
    public static final String CONTENT = "content";
    public static final String CREATE_TIME = "create_time";

    public static void main(String args[]) throws Exception {
        //创建一个模板类
        Schema schema = new Schema(DB_VERSION, PACKAGE_NAME);
        // schema.enableActiveEntitiesByDefault();
        schema.enableKeepSectionsByDefault();
        createTableMessage(schema);
        //new DaoGenerator().generateAll(schema, args[0]);
        //生成对应的类和数据库,此处注意JAVA_SOURCE路径,为什么是这个,你可以用 ./ 代替试试看在哪里
        new DaoGenerator().generateAll(schema, JAVA_SOURCE);
    }

    /**
     * 这里等于网数据库里添加了一张表,设置各个字段,很好理解
     * @param schema
     */
    private static void createTableMessage(Schema schema) {
        if (schema == null) {
            return;
        }
        Entity message = schema.addEntity(CLASS_NAME_MESSAGE);
        message.setTableName(TABLE_NAME_MESSAGE);
        message.addIdProperty().primaryKey().autoincrement();
        message.addStringProperty(TITLE);
        message.addStringProperty(CONTENT);
        message.addDateProperty(CREATE_TIME).notNull();
    }
}

运行时如果报错,可能是中文注释的问题,删除中文部分。接下来单独运行这个java项目,因为这有个main入口。当时我弄的是后,参考了网上的文章,就是不知道怎么运行,特说明【就在xxxDaoGenerator类文件打开的界面里面,右键选择Run "xxxDaoGenerator... main()"选项】。

运行完毕后下方会出现打印控制台,如果没有报错,即搞定。【普通的java代码也可这样在此运行。

运行后生成的代码在app/src/main/java-gen中,这个里面的package名是在xxxDaoGenerator里面设置的,阅读我的demo吧。

好了这个纯java的项目可以忽略了,放一边去,但是不要删除了,方式以后需要修改数据库的结构。这个纯java项目和app等其他的android module不需要有依赖关联,独立的。


三、使用。

我们忘掉刚下的纯java工程module,回到app module下面来,看看java-gen下面生成了什么,bean,dao,session等,怎么使用呢?java-gen下面的代码使生成的,别去修改。

我们常见一个application类,初始化一次数据库,只需要创建一个session实例,暴露给其他的使用处即可:

    public DaoSession daoSession;

    @Override
    public void onCreate() {
        super.onCreate();
        initDatabase();
    }

    public void initDatabase() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, DATABASE_NAME, null);
        SQLiteDatabase db = helper.getWritableDatabase();
        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }

在其他的使用出:

messageDao = ((MyApplication) getApplication()).daoSession.getMessageDao();

// 插入操作,简单到只要你创建一个 Java 对象
Message message = new Message(null, title, content, new Date());
messageDao.insertOrReplace(message);//添加或修改

添加或者修改的方法搞定了。也就是初始化得到一个session实例,从session实例里面获取到我的MessageDao数据操作类,来对Message对象做增删改查,学过java EE开发会hibernate框架的同学很容易理解。

这个messageDao里面还有很多其他的增删改查api:


自己去了解一下吧。


搞定,大概的配置和使用就这些。


demo下载

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用android studio 运行,下面是一个简单的文档,这个代码是一个demo 一、Activity的使用 1、SNActivity 框架最基本的activity,可调用$(SNManager)进行操作activity,具体用法请参考文档或代码 2、SNNavigationSlidingActivity 包含SNActivity的功能,继承于com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity 支持导航条和左滑视图的Activity 加载导航条: loadNavBar(int height,int background_color_id) loadNavBarResId(int height_id,int background_id) 加载左侧视图: /** * load left view * @param left_id left layout id * @param offset_value offset value * @param shadow_width_value shadow width value * @param shadow_drawable_id shadow drawable style * @param fade fade value */ loadLeft(int left_id, int offset_value, int shadow_width_value, int shadow_drawable_id, float fade) /** * load left view * @param left_id left layout id * @param offset_id offset id * @param shadow_width_id shadow width id * @param shadow_drawable_id shadow drawable id * @param fade fade value */ loadLeftResId(int left_id, int offset_id, int shadow_width_id, int shadow_drawable_id, float fade) 二、SNElement的使用 View的伪装对象,支持所有View的功能,详细功能可参考文档或代码 手动伪装:$.create $.id $.findView 注入伪装:$.setContent(view class or layout id,inject class); 获取原型:elem.toView(); 三、注入 1、视图注入 A、创建注入类,属性名称必须和layout中的id对应,如果不对应请加入标签@SNInjectView class DemoInject{ @SNInjectView(id=R.id.tvTest) public SNElement test; } B、实例化注入对象 DemoInject di=new DemoInject(); C、调用$.inject或者$.setContent注入 $.inject(di); D、注入成功后即可调用对象 String text=di.test.text(); 2、依赖注入 A、需要绑定注入对象,建议写到Application中的onCreate SNBindInjectManager.instance().bind(ITest.class, Test.class); B、与视图注入不同的是属性必须添加标签@SNIOC,注入的对象(Test)必须包含只有一个SNManager参数的构造函数,且必须实现注入者 public class Test implements ITest{ SNManager $; public Test(SNManager _$){ this.$=_$; }; } class DemoInject{ @SNIOC public ITest test; } C、调用$.inject或者$.setContent注入 同视图注入 D、注入成功后即可调用对象 di.test.xxx(); 四、fragment的使用 1、SNFragment 2、SNLazyFragment 五、控件的使用 1、SNFragmentScrollable 2、SNPercentLinearLayout、SNPercentRelativeLayout 3、SNScrollable 4、SNSlipNavigation 5、XList 6、slidingtab
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值