我正在玩GreenDAO,我想我喜欢它的工作方式.我不喜欢编写sql代码,所以这将帮助我避免它;)
但是,我认为它确实是基于’sql’的思考你如何设置它.不确定这是不是坏事(要知道事情是如何运作的),但我只想说:这是我的对象!存放它!但是我还没有找到任何东西……
但好吧,我正在做的是以下几点:我有一个对象,让我们说一个书架.我在书架上放了一些书.
这看起来像是这样的:
class BookShelve { List<Book> books; void add(Book b) { books.add(b); } } BookShelve bs = new BookShelve(); Book b1 = new Book(); Book b2 = new Book(); Book b3 = new Book(); bs.add(b1); bs.add(b2); bs.add(b3);
好的,现在我想用GreenDAO存储它.我需要为此使用’addToMany’吗?所以:
Property bookDataProperty = bookData.addLongProperty("bookShelve").getProperty(); ToMany books = BookShelve.addToMany(bookData,bookDataProperty); books.setName("Books");
然后做一个:
bs.getBooks()
得到他们?或者,还有更好的方法?
我认为应该这样做,但我还没有完全相信.
ps:上面的代码中可能有拼写错误,我只是在这里写的,没有编译:)
编辑:
在我给出“回答”检查后,这个问题出现了:
所以,要在书架上添加书籍,我需要:
b1.setBookShelve(bs.getId()); daoSession.insert(b1);
对?
解决方法
我认为您不必了解sql,但您必须了解基本的数据库知识并明确您的E-R模型,我认为您已经拥有.
如果您使用greenDAO并实现Book和BookShelf之间的关系,则无需在BookShelf enity中保留书籍列表.
在DaoGenerator.java中,您只需声明架构
Entity bookShelf = schema.addEntity("BookShelf"); bookShelf.addIdProperty(); Entity book = schema.addEntity("Book"); book.addIdProperty(); book.addStringProperty("name"); Property bookFKShelves = book.addLongProperty("bookShelf_id").notNull().getProperty(); book.addToOne(bookShelf,bookFKShelves); bookShelf.addToMany(book,bookFKShelves);
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this.getActivity(),"BookStore",null); db = helper.getWritableDatabase(); mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); BookDao mBookDao = mDaoSession.getBookDao(); BookShelfDao mBookShelfDao = mDaoSession.getBookShelfDao(); // Insert BookShelf bs = new BookShelf(); Book b1 = new Book(); b1.setName("B1"); b1.setBookShelf(bs); Book b2 = new Book(); b2.setName("B2"); b2.setBookShelf(bs); Book b3 = new Book(); b3.setName("B3"); b3.setBookShelf(bs); mBookDao.insert(b1); mBookDao.insert(b2); mBookDao.insert(b3); mBookShelfDao.insert(bs); // Select for(BookShelf bss :mBookShelfDao.loadAll()){ for (Book b :bss.getBookList()) Lod.d(TAG,"Book Name: "+b.getName()); }