(1)创建一个java工程(可以当成项目的一个module),在main函数里创建Schema,向其添加多个Entity(相当于表),调用DaoGenerator的generateAll方法生成整个数据库
public static void main(String[] args) throws IOException {
Schema schema = new Schema(1, "com.dao”);//默认包路径
addNote(schema);
try {
new DaoGenerator().generateAll(schema, "app/src/main/java”);//生成在指定路径下的默认包路径下
} catch (Exception e) {
e.printStackTrace();
}
}
private static void addNote(Schema schema) {
Entity note = schema.addEntity("Note");
//添加属性
note.addIdProperty();
note.addStringProperty("text").notNull();
note.addStringProperty("comment");
note.addDateProperty("date");
}
(2)通过DaoMaster打开数据库,获取DaoSession对象进行管理各个Dao类,各个Dao类完成对相应表的增删改查
DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(this, "note_db", null);
SQLiteDatabase db = openHelper.getWritableDatabase();
DaoMaster master = new DaoMaster(db);
DaoSession session = master.newSession();
NoteDao noteDao = session.getNoteDao();
noteDao.delete()//增删改查等操作
(3)注意:
一个Schema可以创多个Entity,一个Entity对应一个POJO类
通过DaoMaster管理一个数据库,使用其内部类DevOpenHelper可打开该数据库
通过DaoMaster打开一个DaoSession来管理所有表的Dao类对象,打开各个表的Dao类对象后可以进行表的增删改查操作
往往一个app涉及一个db,只需打开一次DaoSession即可,所以可写在application里,即在自定义的Application类的初始化里初始化DaoSession对象
POJO,DaoMaster等类的创建是通过执行一个java程序的main方法来自动生成到指定包的(需要导包)
(1)通过session打开Dao类后,直接调用dao的各种insert方法传入pojo对象即可插入到对应表中
noteDao.insert(new Note(x,x,x));
noteDao.insertInTx(迭代器,数组);//传入迭代器或数组
noteDao.insertOrReplace(new Note(x,x,x));//主键重复时可替换
noteDao.insertOrReplaceInTx();//主键重复时可替换,且可传入迭代器或数组
(1)通过session打开Dao类后,直接调用dao的delete各种方法即可删除数据(一般是通过传入对象的id字段进行查找删除)
noteDao.delete(new Note(x,x,x));//会根据id删除
noteDao.deleteAll();
noteDao.deleteInTx();//传入迭代器或数组
noteDao.deleteByKey();//根据id删除
noteDao.deleteByKeyInTx();//根据id删除,且可传入迭代器或数组
(1)通过session打开Dao类后,直接调用dao的update方法传入对象或集合即可更新(传入对象的id做判断)
noteDao.update(new Note(x,x,x));//根据id查找并更新
noteDao.updateInTx();//传入迭代器或数组
(1)通过session打开Dao类后,直接获取全部或某一个
noteDao.loadAll();
noteDao.load(id);
(2)可以用dao类的queryBuilder打开一个QueryBuilder对象,进行.where/and/or/join等条件方法进行查找设置,设置完后调用.list/listLazy等方法可以返回查找结果
QueryBuilder qb = noteDao.queryBuilder();
qb.where(NoteDao.Properties.Text.eq(“”));//eq为等于,还有lt,le等比较方法;每个Dao的Properties里存有字段,如Text
List<Note> data = qb.list();
(3)也可以用dao类的queryBuilder.build方法打开一个Query对象,该对象查找完后可以反复使用,只需调用.setParameter设置对应位置的参数再去查询即可
Query query = noteDao.queryBuilder().where(NoteDao.Properties.Text.eq(“”)).build().forCurretThread();
List<Note> data = query.list();
query.setParameter(0,“”);//重设指定位置的值即可再次查询
(4)查询时括号里的条件参数如果需自定义可以直接用new StringCondition(“”)来写原生sql语句进行查询,或者直接用queryRaw方法原生查询
qb.where(new StringCondition(“”));
noteDao.queryRaw(“”,new String[]{});