Android 数据库 GreenDao使用

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

}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值