GreenDao 自动生成数据库

依赖:  详情请转到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插件生成相应的代码。

用法:

@Entity(
        schema = "myschema",
        active = true,
        nameInDb = "AWESOME_USERS",
        createInDb = true
)

 

@Entity:用于标识当前实体需要GreenDao生成代码。
schema:项目中存在多个Schema时,表明当前实体属于哪个Schema。
active:标记实体是否处于活动状态,活动状态才支持更新删除刷新等操作。
nameInDb:存储在数据库中的表名,不写默认与类名一致。
createInDb:标记创建数据库表,若有多个实体关联此表可设为false避免重复创建,默认
为true。

 

属性注解:

@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;
    }
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值