一.准备工作
在工程的build.gradle文件中添加
repositories {
...
mavenCentral()
}
dependencies {
...
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
}
在项目的build.gradle文件中添加
apply plugin: 'org.greenrobot.greendao'
android {
...
greendao {
schemaVersion 1
}
}
dependencies {
...
implementation 'org.greenrobot:greendao:3.3.0'
}
(1)当Bean类对象发生改变时,schemaVersion的数值要增加。
(2)目前引用的版本是最新版,后续更新要注意上方的参考文档。
二. 创建实体类
例:
@Entity
public class TestUser {
@Id(autoincrement = true)
private Long id;
@NotNull
private String name;
@NotNull
private int age;
@NotNull
private String sex;
@Index(unique = true)
private String uid;
}
主键一定要大写的Long。
点击Build → Make Project会自动生成代码。
@Entity
public class TestUser {
@Id(autoincrement = true)
private Long id;
@NotNull
private String name;
@NotNull
private int age;
@NotNull
private String sex;
@Index(unique = true)
private String uid;
@Generated(hash = 1872927493)
public TestUser(Long id, @NotNull String name, int age, @NotNull String sex,
String uid) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.uid = uid;
}
@Generated(hash = 925009630)
public TestUser() {
}
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;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getUid() {
return this.uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
三.初始化
可以将初始化以及增删改查进行封装,在初始化时需要context而且只需要初始化一次,为防止内存泄露所以我们将初始化放在Application进行操作。
public class DbController {
/**
* Helper
*/
private DaoMaster.DevOpenHelper mHelper;//获取Helper对象
/**
* 数据库
*/
private SQLiteDatabase db;
/**
* DaoMaster
*/
private DaoMaster mDaoMaster;
/**
* DaoSession
*/
private DaoSession mDaoSession;
/**
* 上下文
*/
private Context context;
/**
* dao
*/
private PersonInforDao personInforDao;
private static DbController mDbController;
/**
* 获取单例
*/
public static DbController getInstance(Context context){
if(mDbController == null){
synchronized (DbController.class){
if(mDbController == null){
mDbController = new DbController(context);
}
}
}
return mDbController;
}
/**
* 初始化
* @param context
*/
public DbController(Context context) {
this.context = context;
mHelper = new DaoMaster.DevOpenHelper(context,"person.db", null);
mDaoMaster =new DaoMaster(getWritableDatabase());
mDaoSession = mDaoMaster.newSession();
personInforDao = mDaoSession.getPersonInforDao();
}
/**
* 获取可读数据库
*/
private SQLiteDatabase getReadableDatabase(){
if(mHelper == null){
mHelper = new DaoMaster.DevOpenHelper(context,"person.db",null);
}
SQLiteDatabase db =mHelper.getReadableDatabase();
return db;
}
/**
* 获取可写数据库
* @return
*/
private SQLiteDatabase getWritableDatabase(){
if(mHelper == null){
mHelper =new DaoMaster.DevOpenHelper(context,"person.db",null);
}
SQLiteDatabase db = mHelper.getWritableDatabase();
return db;
}
/**
* 会自动判定是插入还是替换
* @param personInfor
*/
public void insertOrReplace(PersonInfor personInfor){
personInforDao.insertOrReplace(personInfor);
}
/**插入一条记录,表里面要没有与之相同的记录
*
* @param personInfor
*/
public long insert(PersonInfor personInfor){
return personInforDao.insert(personInfor);
}
/**
* 更新数据
* @param personInfor
*/
public void update(PersonInfor personInfor){
PersonInfor mOldPersonInfor = personInforDao.queryBuilder().where(PersonInforDao.Properties.Id.eq(personInfor.getId())).build().unique();//拿到之前的记录
if(mOldPersonInfor !=null){
mOldPersonInfor.setName("张三");
personInforDao.update(mOldPersonInfor);
}
}
/**
* 按条件查询数据
*/
public List<PersonInfor> searchByWhere(String wherecluse){
List<PersonInfor>personInfors = (List<PersonInfor>) personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).build().unique();
return personInfors;
}
/**
* 查询所有数据
*/
public List<PersonInfor> searchAll(){
List<PersonInfor>personInfors=personInforDao.queryBuilder().list();
return personInfors;
}
/**
* 删除数据
*/
public void delete(String wherecluse){
personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).buildDelete().executeDeleteWithoutDetachingEntities();
}
}
看看我们的MainActivity
public class MainActivity extends AppCompatActivity {
private Button Add,Delete,Update,Search;
private DbController mDbController;
private PersonInfor personInfor1,personInfor2,personInfor3,personInfor4;
private long insertTipId;
private TextView dataArea;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDbController = DbController.getInstance(MainActivity.this);
initView();
Envent();
similateData();
}
private void similateData() {
personInfor1 = new PersonInfor(null,"001","王大宝","男");
personInfor2 = new PersonInfor(null,"002","李晓丽","女");
personInfor3 = new PersonInfor(null,"003","王麻麻","男");
personInfor4 = new PersonInfor(null,"004","王大锤","女");
}
private void Envent() {
Add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Add
mDbController.insertOrReplace(personInfor1);
mDbController.insertOrReplace(personInfor2);
mDbController.insertOrReplace(personInfor3);
mDbController.insertOrReplace(personInfor4);
showDataList();
}
});
Delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Delete
mDbController.delete("王麻麻");
showDataList();
}
});
Update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Update
mDbController.update(personInfor1);
showDataList();
}
});
Search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Search
showDataList();
}
});
}
private void showDataList() {
StringBuilder sb = new StringBuilder();
List<PersonInfor>personInfors = mDbController.searchAll();
for(PersonInfor personInfor:personInfors){
// dataArea.setText("id:"+p);
sb.append("id:").append(personInfor.getId())
.append("perNo:").append(personInfor.getPerNo())
.append("name:").append(personInfor.getName())
.append("sex:").append(personInfor.getSex())
.append("\n");
}
dataArea.setText(sb.toString());
}
private void initView() {
Add = findViewById(R.id.Add);
Delete = findViewById(R.id.Delete);
Update = findViewById(R.id.Update);
Search = findViewById(R.id.Search);
dataArea= findViewById(R.id.tips);
}
}