转载自http://www.androidchina.net/3472.html
一.greendao依赖jar包下载地址:
http://search.maven.org/#search%7Cga%7C1%7CgreenDao
下载下载greendao-generator 和greendao的最新稳定版本
http://mvnrepository.com/artifact/org.freemarker/freemarker
下载freemarker的最新稳定版本
二.使用步骤:
1.添加依赖jar包依赖:copy到libs文件夹下,右键run as jar
2.创建包(可在任意包下):model,dao,generator,如下图:
3.在包genarator下,创建类GreenDaoGenerator.java,内容如下:
> public class GreenDaoGenerator {
>
public static void main(String[] args) throws Exception {
//1为数据库的版本号,升级数据库的话需修改此处
// 第二个参数为生成model相关类的包名
// 两个参数均可以根据个人需要修改
Schema schema = new Schema(1,"cn.wulincui.databasestudy.model");
/*参数为实体类的生成包名*/ schema.setDefaultJavaPackageDao("cn.wulincui.databasestudy.dao");
//可使由generator生成的代码中,根据个人需要添加自己的代码,再次重新生成代码时,这些个人需要添加的代码不会被清除,使用后代码中会有如下代码段:
// KEEP INCLUDES - put your custom includes here
// KEEP INCLUDES END
schema.enableKeepSectionsByDefault();
//schema.enableActiveEntitiesByDefault();
//ActiveRecord
addEntity(schema);
new DaoGenerator().generateAll(schema, "./app/src/main/java");
}
//添加实体类,以下代码创建了两张表,person和card
//一个人有一张身份证,一张身份证对应一个人,这两者的关系是一对一。下面我们生成这两个实体类,并进行一对一映射。
private static void addEntity(Schema schema) {
//Person为实体类类名也是表名
Entity person = schema.addEntity("Person");
person.addIdProperty().primaryKey();
person.addStringProperty("name");
person.addDoubleProperty("height");
person.addDoubleProperty("weight");
Entity card = schema.addEntity("Card");
card.addIdProperty().primaryKey();
card.addStringProperty("num");
card.addStringProperty("address");
//person和card建立了一一对应的表关系
Property idcardPK = person.addLongProperty("cardId").getProperty();
person.addToOne(card, idcardPK);
Property personPK = card.addLongProperty("personId").getProperty();
card.addToOne(person,personPK);
}
}
4.generator类写好后在此类上右键run,执行此类的main方法
控制台输出
This program comes with ABSOLUTELY NO WARRANTY
Processing schema version 1…
Written D:\hulucode2\DataBaseStudy\app\src\main\java\cn\wulincui\databasestudy\dao\PersonDao.java
Written D:\hulucode2\DataBaseStudy\app\src\main\java\cn\wulincui\databasestudy\model\Person.java
Written D:\hulucode2\DataBaseStudy\app\src\main\java\cn\wulincui\databasestudy\dao\CardDao.java
Written D:\hulucode2\DataBaseStudy\app\src\main\java\cn\wulincui\databasestudy\model\Card.java
Written D:\hulucode2\DataBaseStudy\app\src\main\java\cn\wulincui\databasestudy\dao\DaoMaster.java
Written D:\hulucode2\DataBaseStudy\app\src\main\java\cn\wulincui\databasestudy\dao\DaoSession.java
Processed 2 entities in 194ms
到此dao(实体类)和model(与数据库相关的操作方法)创建成功。
下面代码为方便使用数据库个人写的service类
核心辅助类:
public class DbCore {
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private static Context mContext;
private static String DB_NAME;
//使用前初始化数据库名称,方便创建以用户id创建数据库名的项目
public static void init(Context context, String dbName) {
if (context == null) {
throw new IllegalArgumentException("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);
//当调用SQLiteOpenHelper的getWritableDatabase()
// 或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,
// 如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法。
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
public static DaoSession getDaoSession() {
if (daoSession == null) {
if (daoMaster == null) {
//创建数据库,创建表
daoMaster = getDaoMaster();
}
//将db传到dao类,方便dao对数据库的操作
daoSession = daoMaster.newSession();
}
return daoSession;
}
public static void enableQueryBuilderLog(){
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
}
基础泛型service
public class BaseService<T, K> {
private AbstractDao<T, K> mDao;
public BaseService(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);
}
}
BaseService的实现类:
public class CardService extends BaseService<Card,Long> {
public CardService(CardDao dao) {
super(dao);
}
}
public class PersonService extends BaseService<Person,Long> {
public PersonService(PersonDao dao) {
super(dao);
}
}
编写工具类,获取Service
public class DbUtil {
private static CardService cardService;
private static PersonService personService;
private static PersonDao getPersonDao() {
return DbCore.getDaoSession().getPersonDao();
}
private static CardDao getCardDao() {
return DbCore.getDaoSession().getCardDao();
}
public static CardService getCardService() {
if (cardService == null) {
cardService = new CardService(getCardDao());
}
return cardService;
}
public static PersonService getPersonService() {
if (personService == null) {
personService = new PersonService(getPersonDao());
}
return personService;
}
}
注意,在第一次创建数据库时,首先调用 DbCore.init(this,”1234”);传入数据库名称。