项目中用的ormlite数据库框架,混淆的时候一直出问题,现在学习使用GreenDao,看到好几篇文章,走了很多弯路。
过程看起来很复杂,静下心来看,其实并不复杂。
GreenDao 3.1改动:
GreenDao 3.0最大的变化就是采用注解的方式通过编译方式生成Java数据对象和DAO对象,3.0之前需要通过新建GreenDaoGenerator工程生成Java数据对象和DAO对象,非常的繁琐。
1.首先看我的目录结构:
2、在Android项目中的配置文件(build.gradle)中加入:
sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/java-gen'] } }
!不加上边代码,文件会变为红色
dependencies中导入:3、新建java项目compile 'org.greenrobot:greendao:3.1.1' //greendao compile 'org.greenrobot:greendao-generator:3.1.0' //greendao在main文件下建java-gen
File---New---New Mudole---Java Library
4、java项目中导入:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'org.greenrobot:greendao-generator:3.1.0'//greendao }
5、java项目的文件。MyClass 生成java-ben里的文件
public static void main(String[] args) throws Exception { // 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。 // 两个参数分别代表:数据库版本号与自动生成代码的包路径。 Schema schema = new Schema(1, "me.xiaohu.greendao"); // 当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示: // Schema schema = new Schema(1, "me.itangqi.bean"); // schema.setDefaultJavaPackageDao("me.itangqi.dao"); // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。 // schema2.enableActiveEntitiesByDefault(); // schema2.enableKeepSectionsByDefault(); // 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。 addNote(schema); // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。 // 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。 new DaoGenerator().generateAll(schema, "./app/src/main/java-gen"); } private static void addNote(Schema schema) { // 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名) Entity note = schema.addEntity("Note"); // 你也可以重新给表命名 // note.setTableName("NODE"); // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值 // 接下来你便可以设置表中的字段: note.addIdProperty(); note.addStringProperty("text").notNull(); // 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。 // For example, a property called “creationDate” will become a database column “CREATION_DATE”. note.addStringProperty("comment"); note.addDateProperty("date"); }在文件中右键-Run(MyClass.main()) 有以下信息说明成功,去android项目中看java-gen就可以看到生成的文件
Copyright 2011-2016 Markus Junginger, greenrobot.de. Licensed under GPL V3. This program comes with ABSOLUTELY NO WARRANTY Processing schema version 1... Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\NoteDao.java Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\Note.java Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\DaoMaster.java Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\DaoSession.java Processed 1 entities in 149ms Process finished with exit code 0
6、回到android项目的MyApplication
public class MyApplication extends Application { private SQLiteDatabase db; private DaoMaster daoMaster; public static DaoSession daoSession; @Override public void onCreate() { super.onCreate(); setupDatabase(); //框架的sqlite语句控制台打印 控制 QueryBuilder.LOG_SQL = true; QueryBuilder.LOG_VALUES = true; } private void setupDatabase() { // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。 // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 //建立数据库,指定名字 DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greendao-db", null); db = helper.getWritableDatabase(); // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } }7、MainActivity 使用:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 插入操作,简单到只要你创建一个 Java 对象 Note note = new Note(1L, "title", "comment", new Date()); getNoteDao().insert(note); //查询 Query<Note> noteQuery=getNoteDao() .queryBuilder() .where(NoteDao.Properties.Text.eq("title")) .where(NoteDao.Properties.Comment.like("c"),NoteDao.Properties.Comment.like("o")) .orderAsc(NoteDao.Properties.Date).build(); List<Note>list=noteQuery.list(); } private NoteDao getNoteDao() { return MyApplication.daoSession.getNoteDao(); } }我把项目上传到github上了,可以下载看看:
https://github.com/Strayxiaohu/MYGreenDaoTest10.21