了解GreenDao
greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。
greenDAO 优势
1、一个精简的库
2、性能最大化
3、内存开销最小化
4、易于使用的 APIs
5、对 Android 进行高度优化
接下来配置GreenDao3.2
首先在工程的build.gradle中配置:
在buildscript的dependencies里进行添加
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
在app的build.gradle中配置:
apply plugin: 'org.greenrobot.greendao'在dependencies中添加
compile 'org.greenrobot:greendao:3.2.0'
在android中添加
greendao { schemaVersion 1 daoPackage '填写自己的包名' targetGenDir 'src/main/java' }然后在项目中定义实体类
@Entity public class User { @Id(autoincrement = true) private Long id; private String name; private int age; @Generated(hash = 1309193360) public User(Long id, String name, int age) { this.id = id; this.name = name; this.age = age; } @Generated(hash = 586692638) public User() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } }新建一个类,实例化greenDAO所需要的几个关键对象,DaoMaster,DaoSession,代码如下:
public class GreenDaoManager { private DaoMaster mDaoMaster; private DaoSession mDaoSession; private static volatile GreenDaoManager mInstance = null; private GreenDaoManager() { if (mInstance == null) { DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApp.getApplication(), "user.db"); mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase()); mDaoSession = mDaoMaster.newSession(); } } public static GreenDaoManager getInstance() { if (mInstance == null) { synchronized (GreenDaoManager.class) { if (mInstance == null) { mInstance = new GreenDaoManager(); } } } return mInstance; } public DaoMaster getMaster() { return mDaoMaster; } public DaoSession getSession() { return mDaoSession; } public DaoSession getNewSession() { mDaoSession = mDaoMaster.newSession(); return mDaoSession; } }然后在Application中初始化:
public class MyApp extends Application { private static MyApp myApplication = null; public static MyApp getApplication() { return myApplication; } @Override public void onCreate() { super.onCreate(); myApplication = this; } }
在清单文件中配置
android:name=".MyApp"
添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
然后点击Build下的Make Module 'app',就会自动生成三个类
- DaoMaster:使用greenDAO的切入点。DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。 它具有静态方法来创建表或将它们删除。 其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。一个DaoMaster就代表着一个数据库的连接。
- DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取。 DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。 DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。
- XxxDAO:数据访问对象(DAO)持续存在并查询实体。 对于每个实体,GreenDAO生成一个DAO。 它比DaoSession有更多的持久化方法,例如:count,loadAll和insertInTx。
接下来通过四个按钮测试一下,代码如下:
<Button android:id="@+id/add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击添加"/> <Button android:id="@+id/sel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击查询"/> <Button android:id="@+id/upd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击修改"/> <Button android:id="@+id/del" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击删除"/>
public class MainActivity extends AppCompatActivity{ Button add,sel,upd,del; private User user; private UserDao userDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); add= (Button) findViewById(R.id.add); sel= (Button) findViewById(R.id.sel); upd= (Button) findViewById(R.id.upd); del= (Button) findViewById(R.id.del); DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(), "lenve.db", null); DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb()); DaoSession daoSession = daoMaster.newSession(); userDao = daoSession.getUserDao(); //添加 add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { user = new User(null, "nini", 12); userDao.insert(user); } }); //查询 sel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { List<User> users = userDao.loadAll(); for (int i=0;i<users.size();i++){ Log.d("main",users.get(i).getName()); } } }); //修改 upd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // List<User> user2 = (List<User>) userDao.queryBuilder().where(UserDao.Properties.Name.eq("nini")).build(); // if(user2==null){ // Toast.makeText(MainActivity.this,"用户不存在",Toast.LENGTH_SHORT).show(); // }else { // for(int i=0;i<user2.size();i++){ // user2.get(i).setName("你好"); // userDao.update(user2.get(i)); // } // } User nia = new User((long) 1, "nia", 15); userDao.update(nia); Log.d("main", nia.getName()); } }); //删除 del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //删除首先查询出你要删除的数据,之后是遍历集合,然后一条一条的删除 List<User> userList = (List<User>) userDao.queryBuilder().where(UserDao.Properties.Name.eq("nia")).build().list(); for (User user : userList) { userDao.delete(user); } } }); } }
推荐以下链接:
http://blog.youkuaiyun.com/Hi_AndG/article/details/54695725
http://blog.youkuaiyun.com/u012702547/article/details/52226163