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() 查找全部数据
更详细的可以看这两个个帖子: