1、 首先导入所需的jar包,build.gradle加入如下依赖。
// GreenDao 数据库ORM
compile 'org.greenrobot:greendao:2.2.1'
// GreenDao 生成dao和model的generator的项目 发布时可以去掉
compile 'org.greenrobot:greendao-generator:2.2.0'
2、创建GreenDaoGenerator.java 这里的目录如下,个人喜好。然后运行GreenDaoGenerator.java 生成model 和 dao 下的文件
/**
* Created by tobin on 2016/6/24.
*/
public class GreenDaoGenerator {
public static void main(String[] args) throws Exception {
// 代表创建的数据库的版本号以及默认的java package,如果不修改默认的包名,生成的dao和model都会在该包下
Schema schema = new Schema(1, "com.mylife.greendao.model");
schema.setDefaultJavaPackageDao("com.mylife.greendao.dao");
schema.enableKeepSectionsByDefault();
//实体类是否支持active 如果开启了的话,实体类将之间支持update, refresh, deleted 等操作。
//schema.enableActiveEntitiesByDefault();
addEntity(schema);
//这个是生成Dao文件的路径的位置
new DaoGenerator().generateAll(schema, "./app/src/main/java");
}
private static void addEntity(Schema schema) {
// Entity表示一个实体可以对应成数据库中的表
// "User"相当于是表的类名,用User生成对象就可以访问这个表属性了,也就是这个表对应了这个类.
Entity user = schema.addEntity("User");
user.setTableName("User");
user.addIdProperty();
// 字段参数设置
user.addStringProperty("user_name").unique();
user.addStringProperty("user_nick");
user.addStringProperty("user_password");
user.addDateProperty("user_birthday");
user.addIntProperty("user_gender");
user.addIntProperty("user_height");
user.addFloatProperty("user_weight");
user.addDateProperty("user_registerTime");
// 添加一个身份证表 和User表关联起来
Entity card = schema.addEntity("IdentityCard");
card.addIdProperty().primaryKey();
card.addStringProperty("ic_number");
card.addStringProperty("ic_address");
// 通过addToOne方法进行映射
Property cardPK = user.addLongProperty("identityCardId").getProperty();
user.addToOne(card, cardPK);
Property personPK = card.addLongProperty("userId").getProperty();
card.addToOne(user, personPK);
}
}
3、 创建service类, 代码如下:
DBService.java
public class DbService<T, K> {
private AbstractDao<T, K> mDao;
public DbService(AbstractDao dao) {
mDao = dao;
}
public void save(T item) {
mDao.insert(item);
}
public void save(T... items) {
mDao.insertInTx(items);
}
public void save(List<T> items) {
mDao.insertInTx(items);
}
public void saveOrUpdate(T item) {
mDao.insertOrReplace(item);
}
public void saveOrUpdate(T... items) {
mDao.insertOrReplaceInTx(items);
}
public void saveOrUpdate(List<T> items) {
mDao.insertOrReplaceInTx(items);
}
public void deleteByKey(K key) {
mDao.deleteByKey(key);
}
public void delete(T item) {
mDao.delete(item);
}
public void delete(T... items) {
mDao.deleteInTx(items);
}
public void delete(List<T> items) {
mDao.deleteInTx(items);
}
public void deleteAll() {
mDao.deleteAll();
}
public void update(T item) {
mDao.update(item);
}
public void update(T... items) {
mDao.updateInTx(items);
}
public void update(List<T> items) {
mDao.updateInTx(items);
}
public T query(K key) {
return mDao.load(key);
}
public List<T> queryAll() {
return mDao.loadAll();
}
public List<T> query(String where, String... params) {
return mDao.queryRaw(where, params);
}
public QueryBuilder<T> queryBuilder() {
return mDao.queryBuilder();
}
public long count() {
return mDao.count();
}
public void refresh(T item) {
mDao.refresh(item);
}
public void detach(T item) {
mDao.detach(item);
}
}
UserService.java
public class UserService extends DbService<User,Long> {
public UserService(UserDao dao) {
super(dao);
}
}
4、创建util、代码如下:
DbCore.java
public class DbCore {
private static final String DEFAULT_DB_NAME = "living.db";
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private static Context mContext;
private static String DB_NAME;
public static void init(Context context) {
init(context, DEFAULT_DB_NAME);
}
public static void init(Context context, String dbName) {
if (context == null) {
throw new IllegalArgumentException("DbCore init // context can't be null");
}
mContext = context.getApplicationContext();
DB_NAME = dbName;
}
public static DaoMaster getDaoMaster() {
if (daoMaster == null) {
DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(mContext, DB_NAME, null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
public static DaoSession getDaoSession() {
if (daoSession == null) {
if (daoMaster == null) {
daoMaster = getDaoMaster();
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
public static void enableQueryBuilderLog(){
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
}
DbUtil.java
public class DbUtil {
private static UserService userService;
public static DbService getUserService() {
if (userService == null) {
userService = new UserService(DbCore.getDaoSession().getUserDao());
}
return userService;
}
}
5、在Application里初始化
public class MyLifeApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
DbCore.init(this);
}
}
6、测试、使用。
public class GreenDaoActivity extends AppCompatActivity {
@BindView(R.id.tv_user_data)
TextView tv_user_data;
@BindView(R.id.tv_title)
TextView title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_green_dao);
ButterKnife.bind(this);
title.setText("GreenDao 数据测试");
if (DbUtil.getUserService().queryAll() == null || DbUtil.getUserService().queryAll().size() == 0){
initUserData();
LogUtil.e("DbUtil.getUserService().queryAll() == null || == 0");
}
List<User> userResult = DbUtil.getUserService().queryAll();
String test = "";
LogUtil.e("tobin: " + userResult.size());
for (int j=0 ;j <userResult.size(); j++){
test += "UserName: " + userResult.get(j).getUser_name() + "Nick: " + userResult.get(j).getUser_nick() + "RegisterTime: " + userResult.get(j).getUser_registerTime() + "\n";
}
tv_user_data.setText(test);
}
private void initUserData(){
List<User> userT = new ArrayList<>();
for (int i=0 ; i<50; i++){
User user=new User();
user.setUser_name("Tobin" + i);
user.setUser_nick("Jack" + i);
user.setUser_password("123456");
user.setUser_height(160 + i);
user.setUser_gender(1);
user.setUser_weight(50f + i);
user.setUser_birthday(new Date(System.currentTimeMillis() - 5*365*24*60*60*1000));
user.setUser_registerTime(new Date(System.currentTimeMillis()));
userT.add(user);
// DbUtil.getUserService().save(user);
}
DbUtil.getUserService().saveOrUpdate(userT);
}
}