greenDao的简单使用教程

 目前对数据库操作的开源库也不少,用的比较多的比如Realm,greenDao。就我目前使用时greenDao写下一些关于自己的看法,其实开源库就是为了更加的方便,便捷。所以操作起来也是比较的容易。 
我目前使用的版本是3.2.2
**1.在project的gradle中配置**
dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
    }
**2.在app的gradle中配置**
 greendao {
        schemaVersion 1//<--数据库的版本,用于升级时候进行更改(更改表结构的时候记得升级)
        daoPackage 'com.usher.greendao_demo.greendao.gen'//这个是自动生成代码保存的包名
        targetGenDir 'src/main/java'//保存到java代码路径
    }
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // add library
    compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v1.4.0'//这是我目前使用的一个版本升级的库
}

配置完成之后的操作就比较的easy了(仅限我目前简单的操作)
1.单表操作
首先,肯定是写一个实体类啦。

@Entity
public class User {
    @Id(autoincrement = true)//id自增长
    private Long id;
    private String name;
    //后面的内容Ctrl+F9(或者工具栏build下面的Make Project)会自动生成啦
        .
        .
        .
    }

注解:

@Entity 标识实体类,greenDAO会映射成sqlite的一个表,表名为实体类名的大写形式
@Id 标识主键,该字段的类型为long或Long类型,autoincrement设置是否自动增长
@NotNull 设置表中当前列的值不可为空
《更多属性可以百度》
然后就会自动生成一个包,就是之前在gradle里面配置的。
接下来就可以多数据库进行操作啦。
一般先在Application中进行初始化

//初始化数据库
  GreenDaoManager.getInstance();

我的话是写了一个helper对数据库进行管理,也就是我之前添加的那一个依赖库

public class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        super.onUpgrade(db, oldVersion, newVersion);
        MigrationHelper.migrate(db,... );//这里写入自动生成的Dao的类名
    }
}

然后写一个Manager进行管理

public class GreenDaoManager {
    //数据库的名称
    private static final String DB_NAME="greenDao";

    private static GreenDaoManager mInstance;
    private DaoMaster daoMaster;
    private DaoSession daoSession;

    public static GreenDaoManager getInstance(){
        if(mInstance==null){
            synchronized (GreenDaoManager.class){
                if(mInstance==null){
                    mInstance =new GreenDaoManager();
                }
            }
        }
        return mInstance;
    }

    private GreenDaoManager(){
        if(mInstance==null){
            MySQLiteOpenHelper helper =new MySQLiteOpenHelper(SamApplication.getContext(),DB_NAME,null);
            Database db = helper.getWritableDb();
            daoMaster = new DaoMaster(db);
            daoSession = daoMaster.newSession();
        }
    }

    public DaoSession getDaoSession(){
        return daoSession;
    }

    public DaoMaster getDaoMaster(){
        return daoMaster;
    }

}

然后就可以对数据库进行增删改查啦,依然贴上代码(一个简单的Dao)。。。

public class UserDao {

    private final GreenDaoManager daoManager;
    private static UserDao mUserDao;
    public UserDao(){
        daoManager = GreenDaoManager.getInstance();
    }

   public static UserDao getInstance(){
       if(mUserDao==null){
           mUserDao =new UserDao();
       }
       return mUserDao;
   }
    /**
     * 插入或替换数据
     * @param userInfo
     * @return
     */
    public boolean insertOrReplaceData(UserInfo userInfo){
        boolean flag =false;
        try{
            flag = getUserInfoDao().insertOrReplace(userInfo)==-1?false:true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return flag;
    }
    /**
     * 根据id删除数据
     * @param userInfo
     * @return
     */
    public boolean deleteUserData(UserInfo userInfo){
        boolean flag =false;
        try{
            getUserInfoDao().delete(userInfo);
            flag =true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 删除数据库中所有数据
     * @return
     */
    public boolean deleteAllData(){
        boolean flag =false;
        try{
            getUserInfoDao().deleteAll();
            flag =true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 根据主键查询
     * @param key
     * @return
     */
    public UserInfo queryUserDataById(long key){
        return getUserInfoDao().load(key);
    }

    /**
     * 查询数据库中所有数据
     * @return
     */
    public List<UserInfo> queryAllData(){
        return getUserInfoDao().loadAll();
    }
    public UserInfoDao getUserInfoDao(){
        return daoManager.getDaoSession().getUserInfoDao();
    }
}

单表的操作就完成了,是不是感觉很easy.
多表操作的话其实就是一个主键外键的关联,主表的主键对应子表的外键。
比如:
一个Teacher对应有很多的student

@Entity
public class Teacher{
    @Id()
    private Long id;
    private String name;
    //后面的内容Ctrl+F9(或者工具栏build下面的Make Project)会自动生成啦
    @ToMany(referencedJoinProperty = "sid")
    }
@Entity
public class Student{
    @Id(autoincrement = true)
    private Long id;
    private Long sid;//他的外键与主表的主键相同。那么就关联起来了
    private String name;

    }

后面的操作就和单表操作是一样的了。目前我也是刚刚学习,有什么错误或者不足望指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值