GreenDao

GreenDao是对象关系映射(ORM)数据库是用来操作SQLite数据库的

首先我们要配置数据库:

在App的gradle中:

apply plugin: 'org.greenrobot.greendao'

然后写入版本信息:

  greendao {
        schemaVersion 1
        daoPackage 'com.bwie.test.greendao.gen'/*这个要写自己的包名最后是要创建的包名*/
        targetGenDir 'src/main/java' }

然后导入依赖:

compile 'org.greenrobot:greendao:3.2.0'

在工程的gradle中allprojects

 mavenCentral()

dependencies

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'

配置完是这样:

app的gradle

 

 

然后是工程的gradle:

然后创建一个类:

@Entity
public class User {
    @Id(autoincrement=true)
    private Long id;
    @Property(nameInDb = "NAME")
    private String name;
    @Property(nameInDb = "PASS")
    private String pass;
}

 

然后运行,如果新出现一个你起的名的包如果自己没有改是gen那么恭喜了;你就配对了

然后就是使用了;

变量: UserDao userDao;

DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MainActivity.this, "lenve.db", null); DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb()); DaoSession daoSession = daoMaster.newSession(); userDao = daoSession.getUserDao();

这样就创建好了:

剩下的就用userDao这个对象操作数据库就可以了;

 增:

for (int i=0;i<10;i++){
            User user = new User(i+1,"zhangsan", "张三");//id传null是自增但是要写Long而不是long
            userDao.insert(user);
        }

删:

for (int i=0;i<10;i++){
            User user = new User(i+1,"zhangsan", "张三");
            userDao.delete(user);
        }

改:

User user4 = new User(2,"李四","李四");
        userDao.update(user4);

这个修改就是重新创建了一个对象将id为2的的那个给替换掉了,那么是不是有些麻烦了,我们还需要知道详细的信息,这里还有一个方法

是根据id就可以修改

User userx = userDao.load(2L);//这个就是Long型的id
        userx.setName("要改的名");
        userDao.update(userx);

这个也非常好理解,就是我们根据id查出来然后再给它要改的字段赋值,最后别忘了提交,那么问题又来了,我知道的不是id呢,比如知道用户名要去修改密码

List<User> list = userDao.queryBuilder()
                .where(UserDao.Properties.Name.eq("要改的名")).build().list();//查询字段是“要改的名”然后创建一个集合收集起来
        for (int i = 0 ; i < list.size() ; i++){
            String pass = list.get(i).getPass();
            Log.d("Maina", "getId() :"+pass);
        }

这个就比较复杂了,但是非常实用,通过字段修改,可以将一个或多个同字段相同的值全部找到然后做修改

然后还有两个或多个条件的:

User user = userDao.queryBuilder()  
                .where(UserDao.Properties.Id.ge(10), UserDao.Properties.Username.like("%90%")).build().unique();  
        if (user == null) {  
            Toast.makeText(MainActivity.this"用户不存在!", Toast.LENGTH_SHORT).show();  
        }else{  
            user.setUsername("王五");  
            userDao.update(user);  
        }  

这里我添加了两个查询条件,一个是id要大于等于10,同是还要满足username like %90%,注意最后的unique表示只查询一条数据出来即可。

这样就可以找到了,将他的名字改成王五。

这里看到我们以前用的是符号这里让用简写:给大家普及一下

GT: Greater Than , >
GE: Greater than or Equivalent with , >=
LT: Less than, <
LE: Less than or Equivalent with, <=
EQ: EQuivalent with, ==
NE: Not Equivalent with, /= 
这里NE是没有的需要相反的时候前面加not就行
还有between是之间的意思还有一个in不知道是什么意思也没有查出来,希望知道的大神留言哦!

 

查:

 List<User> users = userDao.loadAll();
        for (int i=0;i<users.size();i++){
           y+=users.get(i).getPass();
        }

还有单个查询:

userDao.load(id)
 
load(K key)    根据id查找数据
loadByRowId(long rowId)        根据行号查找数据
loadAll()      查找全部数据 

更详细的可以看这两个个帖子:

http://blog.csdn.net/Hi_AndG/article/details/54695725

http://blog.csdn.net/u012702547/article/details/52226163

posted @ 2017-11-15 14:50  菜鸟东东  阅读(318)  评论(0编辑  收藏  举报