GreenDao的使用详解

       在Android实际开发中,当要存储一些数据时,大家首先会想到的是什么存储形式?有人说数据库有人说文件。当然两种方式都行。今天就给大家介绍介绍第三方框架GreenDao的使用。好费话不多说,正式开始介绍。

      GreenDao是一个轻量级的数据库,当然也是SQlite数据库。它将我们需要操作的SQL语句以对象的形式进行了细致的封装,以方便开发者的开发。项目中引入GreenDao数据库只要通过下面几个步骤来完成。

 1.引入GreenDao jar包

 2.运行生成对应的数据库文件

 3.对数据库进行对应的增删查改操作

       下面从这三个方面分别进行介绍。

 1.引入GreenDao jar包

       引入一第三方框架第一感觉就是引入jar包,当然GreenDao也不例外。新建一个Android项目,并且在android项目中新建一个java项目。在android和java项目build.gradle文件中分别引入如下jar包(不用配置jar包,会自动下载)。

 compile 'org.greenrobot:greendao:2.2.1'
 compile 'org.greenrobot:greendao-generator:2.2.0'

 compile 'org.greenrobot:greendao-generator:2.2.0'
 2.运行生成对应的数据库文件

        新建一个类用于生成数据库文件,Daomaker.java代码如下所示。

<pre name="code" class="java">package com.example;

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;

public class DaoMaker {
    public static void main(String[] args){
        //1表示数据库版本号,entity表示生成的Student所在的文件名
        Schema schema = new Schema(1,"entity");
        //添加学生属性
        addStudent(schema);
        //设置默认的Dao文件存放的位置
        schema.setDefaultJavaPackageDao("dao");
        try {
            //在指定路径下自动生成数据库的相关文件
            new DaoGenerator().generateAll(schema,"/Users/jamy/AndroidProject/MyApplication/app/src/main/java/com/jamy");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 创建学生表
     * @param schema
     */
    private static void addStudent(Schema schema){
        Entity entity = schema.addEntity("Student");
        entity.addIdProperty();
        entity.addStringProperty("name").notNull();
        entity.addStringProperty("department");
        entity.addIntProperty("age");
    }

}


 
说明:首先获取Schema对象,并将数据库版本号以及所创建的对象所放的包名作为参数传入。其次添加所创建的数据库表的属性值。这里需要注意下必须要添加一个long类型的Id作为主键否则对象添加不到数据库中(目前GreenDao只支持long类型数据作为主键)。 

       运行DaoMaker.java可得到StudentDao,DaoMaster,Daosession,Student类。其中DaoSession主要是对数据库进行一些列的操作,Daomaster主要对数据库进行管理。由此建立数据库的一些准备工作到此结束了。

 3.对数据库进行对应的增删查改操作

      在正式介绍数据库的增删查改之前,先定义一个DaoManager类以此方便对数据库进行一系列的操作。DaoManager.java的具体代码如下所示。

<pre name="code" class="java">package com.jamy.DaoUtils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.jamy.dao.DaoMaster;
import com.jamy.dao.DaoSession;

import de.greenrobot.dao.query.QueryBuilder;

/**
 * Created by jinfangmei on 2016/6/16.
 * 进行数据库的管理
 * 1.创建数据库
 * 2.创建数据库表
 * 3.对数据库进行增删查改
 * 4.对数据库进行升级
 */
public class DaoManager {
    private static  final String   TAG = DaoManager.class.getSimpleName();
    private static  final String  DB_NAME="jamy.db";//数据库名称
    private volatile  static DaoManager mDaoManager;//多线程访问
    private  static DaoMaster.DevOpenHelper mHelper;
    private static  DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;
    private static SQLiteDatabase db;
    private Context context;

    /**
     * 使用单例模式获得操作数据库的对象
     * @return
     */
    public  static DaoManager getInstance(){
        DaoManager instance = null;
        if (mDaoManager==null){
            synchronized (DaoManager.class){
                if (instance==null){
                    instance = new DaoManager();
                    mDaoManager = instance;
                }
            }
        }
        return mDaoManager;
    }

    /**
     * 初始化Context对象
     * @param context
     */
    public void init(Context context){
        this.context = context;
    }

    /**
     * 判断数据库是否存在,如果不存在则创建
     * @return
     */
    public DaoMaster getDaoMaster(){
        if (null == mDaoMaster){
            mHelper =  new DaoMaster.DevOpenHelper(context,DB_NAME,null);
            mDaoMaster = new DaoMaster(mHelper.getWritableDatabase());
        }
        return mDaoMaster;
    }

    /**
     * 完成对数据库的增删查找
     * @return
     */
    public DaoSession getDaoSession(){
        if (null == mDaoSession){
            if (null == mDaoMaster){
                mDaoMaster = getDaoMaster();
            }
            mDaoSession = mDaoMaster.newSession();
        }
        return mDaoSession;
    }

    /**
     * 设置debug模式开启或关闭,默认关闭
     * @param flag
     */
    public void setDebug(boolean flag){
        QueryBuilder.LOG_SQL = flag;
        QueryBuilder.LOG_VALUES = flag;
    }

    /**
     * 关闭数据库
     */
    public void CloseDataBase(){
        closeHelper();
        closeDaoSession();
    }

    public void closeDaoSession(){
        if (null != mDaoSession){
            mDaoSession.clear();
            mDaoSession = null;
        }
    }

    public  void  closeHelper(){
        if (mHelper!=null){
            mHelper.close();
            mHelper = null;
        }
    }
}

 

说明:这里主要是通过单列模式创建DaoManager,DaoMaster,DaoSession对象,进行初始化以及关闭数据库操作。

 数据库增删查改操作:

这里Student的增删查改封装在Utils中,其具体代码如下所示。

package com.jamy.DaoUtils;

import android.content.Context;
import android.util.Log;
import com.jamy.dao.DaoSession;
import com.jamy.dao.StudentDao;
import com.jamy.entity.Student;
import java.util.List;
import de.greenrobot.dao.query.QueryBuilder;


/**
 * Created by jinfangmei on 2016/6/16.
 */
public class Utils {
    private static final String TAG = Utils.class.getSimpleName();
    private static final boolean DUBUG = true;
    private DaoManager manager;
    private StudentDao studentDao;
    private CustomerDao customerDao;
    private DaoSession daoSession;

    public Utils(Context context) {
        manager = DaoManager.getInstance();
        manager.init(context);
        daoSession = manager.getDaoSession();
        manager.setDebug(DUBUG);
    }

    /********************插入操作**********************/
    /**
     * 完成对数据库中student 表的插入操作
     *
     * @param student
     * @return
     */
    public boolean insertStudent(Student student) {
        boolean flag = false;

        flag = manager.getDaoSession().insert(student) != -1 ? true : false;
        Log.i("Utils", "----insertStudent--result is -->>" + flag);
        return flag;
    }

    /**
     * 插入多条记录,需要开辟新的线程
     *
     * @param students
     * @return
     */
    public boolean insertMultStudent(final List<Student> students) {
        boolean flag = false;

        try {
            manager.getDaoSession().runInTx(new Runnable() {
                @Override
                public void run() {
                    for (Student student : students) {
                        manager.getDaoSession().insertOrReplace(student);
                    }
                }
            });
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    /********************更新操作**********************/
    /**
     * 完成对student的某一条记录的修改
     *
     * @param student
     * @return
     */
    public boolean updateStudent(Student student) {
        boolean flag = false;
        try {
            manager.getDaoSession().update(student);
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
/********************删除操作**********************/
    /**
     * @param student
     * @return
     */
    public boolean deleteStudent(Student student) {
        boolean flag = false;
        try {
            //按照指定的id进行删除 delete from student where _id = ?
            manager.getDaoSession().delete(student);
            //manager.getDaoSession().deleteAll();//删除所有的记录
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     *删除所有学生
     */
    public void deleteAllStudent(Class cls){
        manager.getDaoSession().deleteAll(cls);
    }

    /********************查询操作**********************/
    /**
     * 返回多行记录
     *
     * @return
     */
    public List<Student> listAll() {
        return manager.getDaoSession().loadAll(Student.class);
    }

    /**
     * 按照主键返回单行记录
     *
     * @param key
     * @return
     */
    public Student listOneStudent(long key) {
        return manager.getDaoSession().load(Student.class, key);
    }

    public void query1() {
        //使用native sql进行查询操作,
        List<Student> list = manager.getDaoSession().queryRaw(Student.class, " where name like ? and _id > ? ", new String[]{"%李%", "1002"});
        Log.i("--->>", "" + list);
    }

    /**
     * select  * from student where name like ? or name =? or
     * <  <= >= !=  in between and
     * select * from student where age > 23 and department like "IT"
     */
    public void query2() {
        //查询构建器
        QueryBuilder<Student> builder = manager.getDaoSession().queryBuilder(Student.class);
        List<Student> list = builder.where(StudentDao.Properties.Age.ge(23)).where(StudentDao.Properties.Department.like("互联网")).list();
        Log.i("--->>", "" + list);
    }

    public void query3() {
        //逻辑与 和 逻辑或 是双目运算符
        QueryBuilder<Student> builder = manager.getDaoSession().queryBuilder(Student.class);
        //select * from student where (address='北京' or age > 50) and name like '%张%'
        builder.whereOr(StudentDao.Properties.Department.eq("IT"), StudentDao.Properties.Age.ge(50));
        builder.whereOr(StudentDao.Properties.Id.ge(2), StudentDao.Properties.Age.ge(10)).limit(3);//区前三条数据

        builder.where(StudentDao.Properties.Name.like("张"));
        List<Student> list = builder.list();
        Log.i("--->>", "" + list);
    }

}


由于代码比较简单这里就不做详细介绍了。在使用的时候直接调用对应的增删查改操作就OK啦。由此GreenDao简单的使用就介绍到这。说实话写的不是很详细。想更多了解请参考:点击打开链接,如果您有宝贵意见欢迎一起交流。

  







       

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sourcetree是一个非常好用的git客户端,它提供了可视化的界面帮助开发者进行多人协作开发过程中的各种git操作,比如push、pull、add、commit、merge等等。 在使用Sourcetree之前,你需要先下载、安装和配置好环境。然后你可以打开Sourcetree,它会展示一个初始界面,其中包含了本地仓库的相关信息。 Sourcetree是一个强大的工具,但本文只介绍了一些常用的功能,并没有记录一些使用频率较低的功能。工具的目的是帮助我们提高工作效率,所以我们只需要掌握最有用的部分即可。 在正文部分,你可以了解到Sourcetree的各种功能,以及对应的git命令和如何使用这些功能。它详细介绍了各种常用操作,帮助你更好地使用Sourcetree进行版本控制。[1,2] 使用Sourcetree可以很方便地进行分支的检出和关联远程分支。当你使用命令行检出分支后,你还需要执行一些操作来与远程分支进行关联。但是Sourcetree非常友好,当你点击克隆按钮时,它会自动帮助你与远程仓库进行关联。 总之,Sourcetree是一个功能强大且易于使用的git客户端,它为开发者提供了可视化的界面来管理和执行各种git操作,帮助我们更高效地进行协同开发。[1,2,3]<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Sourcetree 使用详解](https://blog.csdn.net/weixin_43837354/article/details/105936140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [SourceTree使用教程图文详解](https://blog.csdn.net/qq_41153943/article/details/120814918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值