您的位置:首页 > 移动开发 > Android开发

简单使用GreenDao3.2进行增删改查

2017-11-15 16:13 387 查看

了解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;
}
}

然后在Applic
deb4
ation中初始化:

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.csdn.net/Hi_AndG/article/details/54695725 http://blog.csdn.net/u012702547/article/details/52226163
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息