标签:编辑 ons from col tac [] list desc dao
在我的应用程序这样设计的关系:和我想选择至少一个用户作为一个朋友的所有聊天。
基本上,我想要执行以下查询:\
SELECT c.* FROM CHAT c, USER u, UserChats uc WHERE c.type = myType AND u.isFriend = 1 AND c.id = uc.chatId AND u.id = uc.userId
我没设法找到了 GreenDao 库中执行这方式,希望有人能够帮我这。
编辑:
这是我到现在有:
List<UsersChats> list = usersChatsDao.queryDeep( "WHERE T0." + UserDao.Properties.isFriend.collumnName + " = ? "+ "AND T1." + ChatDao.Properties.type.collumName + " = ?", new String[] {"1", myType}); if(list != null && list.isEmpty() == false) { List<Chat> chats = new ArrayList<Chat>(); for(UsersChats link : list) { chats.add(link.getChat()); } }
因为 grrendao 不会执行 QueryBuilder.join()
-目前的方法,我认为您的解决方案是你现在能找到的最好的一个,它在内部使用的联接。
有只小缺点给它:
listLazy()
另一种方法是使用一些像这样的查询 (假定 IsFriend
是 int-column
和 myType
适合到 ChatDao.Properties.type
:
Query<Chat> qc = chatDao.queryRawCreate( " LEFT JOIN "+UserChatsDao.TABLENAME+" UC"+ " ON T."+ChatDao.Properties.id.columnName+"=UC."+UserChats.Properties.chatId.columnName+ " LEFT JOIN "+UserDao.TABLENAME+" U"+ " ON UC."+UserChats.Properties.userId.columnName+"=U."UserDao.Properties.id.columnName+ " WHERE U."UserDao.Properties.isFriend.columnName+"=?"+ " AND T."+ChatDao.Properties.type.columnName+"=?", 1, myType);
或者 (大概少性能等):
Query<Chat> qc = chatDao.queryRawCreate( " , "+UserChatsDao.TABLENAME+" UC"+ " , "+UserDao.TABLENAME+" U"+ " WHERE T."+ChatDao.Properties.type.columnName+"=?"+ " AND U."+UserDao.Properties.isFriend.columnName+"=?"+ " AND T."+ChatDao.Properties.id.columnName+"=UC."+UserChats.Properties.chatId.columnName+ " AND U."UserDao.Properties.id.columnName+"=UC."+UserChats.Properties.userId.columnName, myType, 1);
然后您可以使用所需的 list()
-方法:
qc.list();
qc.listLazy();
...
标签:编辑 ons from col tac [] list desc dao
原文地址:https://www.cnblogs.com/zhujiabin/p/9005058.html