安卓开发之GreenDao使用

最近接触了一些开源的项目,项目中数据存储大多选用GreenDao框架,因此这次就来学习GreenDao的使用。GreenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,让操作数据库时更简单、更方便。
在这里插入图片描述
GreenDao对外提供的核心类有:

  • DaoMaster:DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的Dao类。它具有静态方法来创建表或将他们删除。其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。
  • DaoSession:管理特定模式的所有可用Dao对象,还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。
  • Dao:数据访问对象(Dao)持续存在并查询实体。对于每个实体,GreenDao生成一个Dao,它比DaoSession有更多的持久化方法。
  • 实体:持久对象,通常实体是使用标准Java属性(如POJO或JavaBean)来表示数据库的对象。

使用方法如下:

  • 首先是相关的环境配置:
    修改 project 的 build.gradle:
    在这里插入图片描述
    修改app的build.gradle:
    在这里插入图片描述
    其中schemaVersion表示数据库schema版本;daoPackage表示设置相关Dao类(DaoMaster 、DaoSession、Dao)的包名;targetGenDir表示设置要生成DAO文件的目标工程的项目路径。
  • 新建实体类
 @Entity
public class Person {
    @Id(autoincrement = true)
    private Long id;
    private String name;
    private String sex;
}

然后点击:
在这里插入图片描述
就会自动生成很多东西:
在这里插入图片描述
实体类也会变成:

@Entity
public class Person {
    @Id(autoincrement = true)
    private Long id;

    private String name;
    private String sex;
    @Generated(hash = 1401504130)
    public Person(Long id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }
    @Generated(hash = 1024547259)
    public Person() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return this.sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

}

新建一个Dao帮助类封装数据库操作类:里面包含增删改查四个操作

public class DaoHelper {
    private DaoMaster.DevOpenHelper mDevOpenHelper;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private PersonDao mPersonDao;
    private static  DaoHelper mDaoHelper;

    private DaoHelper(Context context) {
        mDevOpenHelper = new DaoMaster.DevOpenHelper(context.getApplicationContext(), "person.db",null);
        mDaoMaster = new DaoMaster(mDevOpenHelper.getWritableDb());
        mDaoSession = mDaoMaster.newSession();
        mPersonDao = mDaoSession.getPersonDao();
    }

    public static DaoHelper getInstance(Context context){
        if (mDaoHelper == null){
            synchronized (DaoHelper.class){
                if (mDaoHelper == null) {
                    mDaoHelper = new DaoHelper(context);
                }
            }
        }
        return mDaoHelper;
    }



    /**
     * add
     */
    public long insert(Person person) {
        return mPersonDao.insert(person);
    }

    public void insertOrReplace(Person person) {
        mPersonDao.insertOrReplace(person);
    }

    /**
     * delete
     */
    public void delete(String name){
        mPersonDao.queryBuilder().where(PersonDao.Properties.Name.eq(name)).buildDelete().executeDeleteWithoutDetachingEntities();
    }

    /**
     * update
     */

    public void update(Person person){
        Person old = mPersonDao.queryBuilder().where(PersonDao.Properties.Id.eq(person.getId())).build().unique();
        if(old!=null){
            old.setName("iris");
            mPersonDao.update(old);
        }
    }

    /**
     * query
     */
    public List<Person> searchByWhere(String name){
        List<Person> personInfors = (List<Person>) mPersonDao.queryBuilder().where(PersonDao.Properties.Name.eq(name)).build().unique();
        return personInfors;
    }

    public List<Person> searchAll(){
        List<Person> personInfors = mPersonDao.queryBuilder().list();
        return personInfors;
    }

}

最后MainActivity:

public class MainActivity extends AppCompatActivity {
    private Button add,delete,update,query;
    private DaoHelper daoHelper;
    private TextView textView;
    private Person person1,person2,person3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        daoHelper = DaoHelper.getInstance(MainActivity.this);
        initviews();
        initdata();
        event();
    }

    private void initdata() {
        person1 = new Person(1L,"张三","男");
        person2 = new Person(2L,"李四","女");
        person3 = new Person(3L,"王五","男");
    }

    private void initviews() {
        add = findViewById(R.id.add);
        delete = findViewById(R.id.delete);
        update = findViewById(R.id.update);
        query = findViewById(R.id.query);
        textView = findViewById(R.id.textview);
    }

    private void event() {
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                daoHelper.insertOrReplace(person1);
                daoHelper.insertOrReplace(person2);
                daoHelper.insertOrReplace(person3);
                showDataList();
            }
        });

       delete.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               daoHelper.delete("张三");
               showDataList();
           }
       });

       update.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               daoHelper.update(person2);
               showDataList();
           }
       });

       query.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               showDataList();
           }
       });
    }

    private void showDataList() {
        StringBuilder sb = new StringBuilder();
        List<Person> personInfors = daoHelper.searchAll();
        for(Person person:personInfors){
            sb.append("id:").append(person.getId()).append(" name:").append(person.getName()).append(" sex:").append(person.getSex()).append("\n");
        }
        textView.setText(sb.toString());
    }
}

效果如下:
add:
在这里插入图片描述
delete:
在这里插入图片描述
update:
在这里插入图片描述
参考:
GreenDao使用总结
GreenDao 3.0使用

猜你喜欢

转载自blog.csdn.net/weixin_42011443/article/details/108428753