GreenDao 自动生成数据库
程序员文章站
2024-03-21 23:05:58
...
依赖: 详情请转到github
//根gradle
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
//app gradle
apply plugin: 'org.greenrobot.greendao'
greendao {
schemaVersion 1 //数据库版本号
daoPackage '包名.database' //设置时生成代码的目录
targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
}
dependencies {
compile 'org.greenrobot:greendao:3.2.2'
}
GreenDao简介:
GreenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM(Object Relational Mapping)
对象关系映射数据库框架,本文将讲解如何集成GreenDao3.0环境,如何使用GreenDao自动生成代码及
注解的使用。
GreenDao GitHub
GreenDao3.0优势:
GreenDao相较于ORMLite等其他数据库框架有以下优势: 1. 一个精简的库 2. 性能最大化 3. 内存开销最小化 4. 易于使用的 APIs 5. 对 Android 进行高度优化 而GreenDao3.0的版本主要使用注解方式定义实体类,通过gradle插件生成相应的代码。 |
用法:
|
|
属性注解:
@Id :主键Long型,可以通过@Id(autoincrement = true)设置自增长。
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名例如@Property
(nameInDb="name")。
@NotNul:设置数据库表当前列不能为空。
@OrderBy:指定排序。
@Transient:添加此标记之后不会生成数据库表的列。
@Generated:为build之后GreenDao自动生成的注解,为防止重复,每一块代码生成后
会加个hash作为标记。
------------
@ToMany:定义与多个实体对象一对多的关联,referencedJoinProperty为外键约束。
Query
主键:
load(Long key)
loadAll()
查询:
Query query = employeeDao.queryBuilder()
.where(**.Properties.**.eq(**),
**.Properties.**.ge(**))
.build();
子线程查询:
private void queryThread() {
final Query query = **Dao.queryBuilder().build();
new Thread(){
@Override
public void run()
List list = query.forCurrentThread().list();
}
}.start();
}
我的github
https://github.com/tongchexinfeitao/GreenDao
greenDao参考链接:
https://blog.csdn.net/njweiyukun/article/details/51893092
grrenDao多表联查:
https://www.jianshu.com/p/dbec25bd575f
代码:
public class DaoManager {
private static volatile DaoManager instance;
private final DaoSession daoSession;
private DaoManager(Context context) {
daoSession = DaoMaster.newDevSession(context, "person.db");
}
public static DaoManager getInstance(Context context) {
if (instance == null) {
synchronized (DaoManager.class) {
if (null == instance) {
instance = new DaoManager(context);
}
}
}
return instance;
}
public DaoSession getDaoSession() {
return daoSession;
}
}
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@BindView(R.id.btn_query)
Button btnQuery;
@BindView(R.id.btn_add)
Button btnAdd;
@BindView(R.id.btn_update)
Button btnUpdate;
@BindView(R.id.btn_delete)
Button btnDelete;
private DaoSession daoSession;
private PersonDao dao;
private int index;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
daoSession = DaoManager.getInstance(this).getDaoSession();
dao = daoSession.getPersonDao();
}
@OnClick({R.id.btn_query, R.id.btn_add, R.id.btn_update, R.id.btn_delete})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_query:
List<Person> list = dao.queryBuilder()
.where(PersonDao.Properties.Age.lt(500))
.orderDesc(PersonDao.Properties.Age)
.build()
.list(); // 全查的时候.list
for (Person person : list) {
Log.d(TAG, "onViewClicked: " + person.toString());
}
break;
case R.id.btn_add:
index++;
Person person = new Person(null, "name" + index, index * 10);
dao.insert(person);
Toast.makeText(this, "插入成功", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_update:
List<Person> list1 = dao.queryBuilder()
.where(PersonDao.Properties.Age.lt(500))
.orderDesc(PersonDao.Properties.Age)
.build()
.list(); // 更改的时候,先查询,在对对象进行更改
for (Person person1 : list1) {
if (person1.getAge() == 20) {
person1.setAge(100);
dao.update(person1);
}
}
break;
case R.id.btn_delete:
Person person1 = dao.queryBuilder()
.where(PersonDao.Properties.Id.eq(2))
.build()
.unique(); // 查询唯一的一条数据
if (person1 != null) {
dao.delete(person1);
}
break;
}
}
}
@Entity(nameInDb = "person_table")
public class Person {
@Id(autoincrement = true)
private Long id;
@Property(nameInDb = "name")
private String mingzi;
private int age;
@Transient
private String idCard;
@Override
public String toString() {
return "Person{" +
"id=" + id +
", mingzi='" + mingzi + '\'' +
", age=" + age +
", idCard='" + idCard + '\'' +
'}';
}
@Generated(hash = 244725397)
public Person(Long id, String mingzi, int age) {
this.id = id;
this.mingzi = mingzi;
this.age = age;
}
@Generated(hash = 1024547259)
public Person() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getMingzi() {
return this.mingzi;
}
public void setMingzi(String mingzi) {
this.mingzi = mingzi;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
上一篇: Minecraft Fabric模组开发 (六) 方块实体
下一篇: selenium自动化测试
推荐阅读
-
Hibernate自动生成数据库中的表
-
GreenDao 自动生成数据库
-
Python自动化测试(unittest)使用BeautifulReport和HTMLTestRunner生成HTML测试报告
-
生成数据库字典SQL
-
Eclispe ibatis生成数据库表结构
-
beego自动生成数据库和表 更新数据库表结构 不删除表数据
-
python unittest 极简自动化测试框架:二、 BeautifulReport的使用简解,生成漂亮的报告
-
用 Postman 做接口自动化(十五)xmysql 辅助操作 mysql 数据库(二)
-
Mysql数据库表生成java实体工具类
-
生成mysql数据库po和mapper工具类