今天看了下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 : [email protected] 10 * 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 schema 43 */ 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(); // 不能为null 57 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 : [email protected] 12 * 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 * 获取DaoMaster 31 * 32 * @param context 33 * @return 34 */ 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 context 51 * @return 52 */ 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 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical"> 6 7 <Button 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:onClick="insert" 11 android:text="Insert" /> 12 13 14 <Button 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:onClick="delete" 18 android:text="delete" /> 19 20 21 <Button 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:onClick="update" 25 android:text="update" /> 26 27 28 <Button 29 android:layout_width="wrap_content" 30 android:layout_height="wrap_content" 31 android:onClick="query" 32 android:text="query" /> 33 34 <Button 35 android:layout_width="wrap_content" 36 android:layout_height="wrap_content" 37 android:onClick="QueryById" 38 android:text="QueryById" /> 39 40 <Button 41 android:layout_width="wrap_content" 42 android:layout_height="wrap_content" 43 android:onClick="deleteAll" 44 android:text="deleteAll"/> 45 46 47 </LinearLayout>
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 QueryBuilder<User> queryBuilder = userDao.queryBuilder(); 81 List<User> 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<User> queryBuilder = userDao.queryBuilder(); 100 101 // where 102 QueryBuilder<User> query = queryBuilder.where(UserDao.Properties.Id.eq(6)); 103 104 System.out.println("query:" + query.list().toString()); 105 106 } 107 108 }
这样就可以简单的操作数据库了
时间: 2024-10-10 07:41:37