首先配置grendao
1、导入相应的包
- compile'org.greenrobot:greendao:3.0.1'
- compile'org.greenrobot:greendao-generator:3.0.0'
2、配置项目的Gradle
-
- dependencies {
- classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
- }
3、配置app的Gradle
- apply plugin: 'org.greenrobot.greendao'
- //android里添加下面代码
- greendao {
- schemaVersion 1
- daoPackage 'com.example.anonymous.greendao.gen' //一般为app包名+生成文件的文件夹名
- targetGenDir 'src/main/java' //生成文件路径
- }
- // schemaVersion 指定数据库schema版本号,迁移等操作会用到
// daoPackage 通过gradle插件生成的数据库相关文件,这里我设置的文件路径是com.example.anonymous.greendao
// targetGenDir 这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不 // 是build中,这样就不用额外的设置资源目录了
- @Entity
- public class User {
- @Id
- private Long id;
- private String name;
- }
@Id:通过这个注解标记的字段必须是Long类型的,这个字段在数据库中表示它就是主键,并且它默认就是自增的
就这么简单含有两个字段的实体类
然后点击这个按钮
builder完之后会有两个地方发生了变化
这是GreenDao自动为你生成的,路径就是你在gradle中配置的路径
现在只有一个User表,如果再添加一个Age实体类,你在点击Make Project按钮,他还会把AgeDao自动生成出来
在增、删、改、查之前第一步做的就是需要对数据库进行初始化,不可能就这样直接对实体类操作,这样不太现实的,否则为什么GreenDao会自动生成这么多代码呢?
- DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "my-db", );
- DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
- DaoSession daoSession = daoMaster.newSession();
- UserDao userDao = daoSession.getUserDao();
通过GreenDao生成的代码,我们可以获取到实体类的实例,也就是数据库表的实例,这样我们才能操作数据库
4、增、删、改、查
1、增加
- User user1 = new User(,"zhangsan");
- userDao.insert(user1);
2、删除
- User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("zhangsan")).build().unique();
- if(findUser != null){
- userDao.deleteByKey(findUser.getId());
- }
3、修改
- User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("zhangsan")).build().unique();
- if(findUser != null) {
- findUser.setName("lisi");
- userDao.update(findUser);
- Toast.makeText(MyApplication.getContext(), "修改成功", Toast.LENGTH_SHORT).show();
- } else {
- Toast.makeText(MyApplication.getContext(), "用户不存在", Toast.LENGTH_SHORT).show();
- }
4、查询
- List<User> userList = userDao.queryBuilder()
- .where(UserDao.Properties.Id.notEq(1))
- .limit(5)
- .build().list();
查询语句是数据库操作最多的,语句也比较复杂,具体的语句请去看官网
简单封装
其实这样写代码,作为程序员并不能满足,最起码的重用还是需要的,所以简单的封装一下吧
我们需要添加几个类来负责代码的重用工作,先看一下整体的工程结构:
1、MyApplication:返回Context对象
2、DaoManager:初始化数据库,获取相应的操作对象
3、EntityManager:对数据库表的初始化,获取实体类的操作对象
- public class MyApplication extends Application {
- private static Context mContext;
- @Override
- public void onCreate() {
- super.onCreate();
- mContext = getApplicationContext();
- }
- public static Context getContext() {
- return mContext;
- }
- }
- /**
- * greenDao管理类
- */
- public class DaoManager {
- private static DaoManager mInstance;
- private DaoMaster mDaoMaster;
- private DaoSession mDaoSession;
- private DaoManager() {
- DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "my-db", );
- DaoMaster mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
- mDaoSession = mDaoMaster.newSession();
- }
- public DaoMaster getMaster() {
- return mDaoMaster;
- }
- public DaoSession getSession() {
- return mDaoSession;
- }
- public static DaoManager getInstance() {
- if (mInstance == null) {
- mInstance = new DaoManager();
- }
- return mInstance;
- }
- }
- public class EntityManager {
- private static EntityManager entityManager;
- public UserDao userDao;
- /**
- * 创建User表实例
- *
- * @return
- */
- public UserDao getUserDao(){
- userDao = DaoManager.getInstance().getSession().getUserDao();
- return userDao;
- }
- /**
- * 创建单例
- *
- * @return
- */
- public static EntityManager getInstance() {
- if (entityManager == null) {
- entityManager = new EntityManager();
- }
- return entityManager;
- }
- }
- // TODO: 2017/1/1 一句话就把相应的数据库表的实例返回,进行操作
- UserDao userDao = EntityManager.getInstance().getUserDao();
- User user1 = new User(,"zhangsan");
- userDao.insert(user1);
DaoManager和EntityManager主要作用是对数据库和表的初始化工作抽出来作为复用,在Activity中使用的时候,我们可以直接操作表,不需要在初始化工作了,这篇文章作为我的学习笔记,希望也能为看到的朋友提供帮助!