今天看了下Android的ORM框架,然后就看到了GreenDao这个东东....感觉用了这个操作数据库就变得简单多了,不用再写那些SQL语句,和Hibernate框架挺像的....GreenDao就是将java对象映射到Sqlite数据库,通过对java对象进行存储、更新、删除、查询来操作数据库,简单化数据库操作。
- 配置环境
- 首先要引入两个jar包
compile 'de.greenrobot:greendao-generator:2.0.0'compile 'de.greenrobot:greendao:2.0.0'
- 首先要引入两个jar包
使用android studio的这里可以直接添加:
1、在项目中创建一个generator,dao、mode这三个包。generator包用于写生成dao和model的一个类,dao包用于存放与dao相关的类,model用于存放实体类
2.生成相关类
在generator包下,新建一个生成dao和model代码的类ExampleDaoGenerator,在里面添加代码:
1 package com.itljw.greendaodemo.generator; 2 3 import de.greenrobot.daogenerator.DaoGenerator; 4 import de.greenrobot.daogenerator.Entity; 5 import de.greenrobot.daogenerator.Schema; 6 7 /** 8 * Created by JW on 2015/11/5 09:44. 9 * Email : 1481013719@qq.com10 * Description :11 */12 public class ExampleDaoGenerator {13 14 public static void main(String[] args) {15 16 try {17 /**18 * 参数1:数据库版本号19 * 参数2:默认的java package,如果不修改默认的报名,生成的dao和model都会在该包下20 */21 Schema schema = new Schema(1, "com.itljw.greendaodemo.model");22 // 修改dao的包路径,dao将会生成在这个包下23 schema.setDefaultJavaPackageDao("com.itljw.greendaodemo.dao");24 25 // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。26 // schema2.enableActiveEntitiesByDefault();27 // schema2.enableKeepSectionsByDefault();28 29 addEntity(schema); // 添加一个实体对象30 31 // 自动生成代码,第二个参数:指定输出路径32 new DaoGenerator().generateAll(schema, "D:/AndroidStudioProjects/GreenDaoDemo/app/src/main/java");33 } catch (Exception e) {34 e.printStackTrace();35 }36 37 }38 39 /**40 * 添加实体41 *42 * @param schema43 */44 private static void addEntity(Schema schema) {45 46 /**47 * 一个实体类就关联到数据库中的一张表,数据库中表的名字默认就是类的名字48 */49 Entity user = schema.addEntity("User");50 51 user.setTableName("user"); // 可以设置表的名字52 53 // GreenDao会自动根据实体类的属性值来创建表的字段,并赋予默认值54 user.addIdProperty().primaryKey().autoincrement(); // 指定id,主键自增55 56 user.addStringProperty("username").notNull(); // 不能为null57 user.addStringProperty("password").notNull();58 59 60 }61 62 }
执行这个类,在控制台可以看到 :
然后就可以在dao和model两个包下查看到对应的代码了
3、在Application层,写两个方法,用于获取DaoMaster和DaoSession
1 package com.itljw.greendaodemo; 2 3 import android.app.Application; 4 import android.content.Context; 5 6 import com.itljw.greendaodemo.dao.DaoMaster; 7 import com.itljw.greendaodemo.dao.DaoSession; 8 9 /**10 * Created by JW on 2015/11/5 10:54.11 * Email : 1481013719@qq.com12 * Description :13 */14 public class App extends Application {15 16 private App Instance;17 private static DaoMaster daoMaster;18 private static DaoSession daoSession;19 20 public App getInstance() {21 22 if (Instance == null) {23 Instance = this;24 }25 26 return Instance;27 }28 29 /**30 * 获取DaoMaster31 *32 * @param context33 * @return34 */35 public static DaoMaster getDaoMaster(Context context) {36 37 if (daoMaster == null) {38 39 DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context, ConstantValue.DBName, null);40 41 daoMaster = new DaoMaster(helper.getWritableDatabase());42 43 }44 return daoMaster;45 }46 47 /**48 * 获取DaoSession对象49 *50 * @param context51 * @return52 */53 public static DaoSession getDaoSession(Context context) {54 55 if (daoSession == null) {56 if (daoMaster == null) {57 getDaoMaster(context);58 }59 daoSession = daoMaster.newSession();60 }61 62 return daoSession;63 }64 65 }
4、测试:
布局文件:
1 26 7 12 13 14 19 20 21 26 27 28 33 34 39 40 45 46 47
MainActivity代码:
1 package com.itljw.greendaodemo; 2 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 import android.view.View; 6 import android.widget.Toast; 7 8 import com.itljw.greendaodemo.dao.DaoSession; 9 import com.itljw.greendaodemo.dao.UserDao; 10 import com.itljw.greendaodemo.model.User; 11 12 import java.util.List; 13 14 import de.greenrobot.dao.query.QueryBuilder; 15 16 public class MainActivity extends AppCompatActivity { 17 18 19 private DaoSession daoSession; 20 private UserDao userDao; 21 22 @Override 23 protected void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 27 daoSession = App.getDaoSession(this); // 获取DaoSession 28 userDao = daoSession.getUserDao(); // 获取UserDao 可对User进行操作 29 30 31 } 32 33 /** 34 * Insert数据 35 * @param view 36 */ 37 public void insert(View view){ 38 39 for(int i = 0 ;i < 10 ; i ++){ 40 41 User user = new User(); 42 user.setUsername("haha" + i); 43 user.setPassword("test" + i); 44 45 // 直接操作对象,将对象插入数据库,这个和Hibernate的一样 46 userDao.insert(user); 47 } 48 49 Toast.makeText(MainActivity.this, "插入数据!", Toast.LENGTH_SHORT).show(); 50 51 } 52 53 /** 54 * Delete数据 根据id删除对应数据 55 * @param view 56 */ 57 public void delete(View view){ 58 userDao.deleteByKey(1l); 59 } 60 61 /** 62 * Update数据 根据id更新对应的数据 63 * @param view 64 */ 65 public void update(View view){ 66 67 User user = new User(); 68 user.setId(2l); 69 user.setUsername("update"); 70 user.setPassword("update_psw"); 71 72 userDao.update(user); 73 } 74 75 /** 76 * Query数据 77 * @param view 78 */ 79 public void query(View view){ 80 QueryBuilderqueryBuilder = userDao.queryBuilder(); 81 List userList = queryBuilder.list(); // 使用list进行查询 82 System.out.println("userList : " + userList.toString()); 83 } 84 85 /** 86 * DeleteAll 删除所有数据 87 * @param view 88 */ 89 public void deleteAll(View view){ 90 userDao.deleteAll(); 91 } 92 93 /** 94 * 根据id查询对应的数据 95 * @param view 96 */ 97 public void QueryById(View view){ 98 99 QueryBuilder queryBuilder = userDao.queryBuilder();100 101 // where102 QueryBuilder query = queryBuilder.where(UserDao.Properties.Id.eq(6));103 104 System.out.println("query:" + query.list().toString());105 106 }107 108 }
这样就可以简单的操作数据库了
posted on 2015-11-05 14:15 阅读( ...) 评论( ...)