好吧,把这个多对多也记下来 代码就是官方网站的示例代码。
主要是了解查询方式 这个映射倒是很好理解 在除了建立2个有多对多关系的实体类表之外还需要一张中间表
大概是这么个意思
user user_id name
postmpost_id contents
userpost userpost_id user_id post_id
//这userpost里具体实现应该是保存ID 但是在建立userpost类的时候 是写入一个对象 并且写入@DatabaseField(foreign = true, columnName = USER_ID_FIELD_NAME)代码 让其成为外键 并指定列名.后面用到 框架自动处理了一些细节了。
User user1 = new User("Jim Coakley");
userDao.create(user1); //保存第一个User对象
Post post1 = new Post("Wow is it cold outside!!");
postDao.create(post1);//保存第一个Post对象
UserPost user1Post1 = new UserPost(user1, post1);
userPostDao.create(user1Post1); //保存Userpost对象 关联他们的关系List<Post> posts = lookupPostsForUser(user1); // 查询第一个user1对象关联的post对象
private PreparedQuery<Post> postsForUserQuery = null;
private PreparedQuery<User> usersForPostQuery = null;private List<Post> lookupPostsForUser(User user) throws SQLException {
if (postsForUserQuery == null) { postsForUserQuery = makePostsForUserQuery(); //准备查询 } postsForUserQuery.setArgumentHolderValue(0, user); //设置参数 return postDao.query(postsForUserQuery);//查询 }
private PreparedQuery<Post> makePostsForUserQuery() throws SQLException {
QueryBuilder<UserPost, Integer> userPostQb = userPostDao.queryBuilder();
userPostQb.selectColumns(UserPost.POST_ID_FIELD_NAME); //这个POST_ID_FIELD_NAME是前面设置的,就是我们要查询的post-id
相当于 select post_id from userpost where user_id=? 之类的
SelectArg userSelectArg = new SelectArg();
userPostQb.where().eq(UserPost.USER_ID_FIELD_NAME, userSelectArg);QueryBuilder<Post, Integer> postQb = postDao.queryBuilder();
postQb.where().in(Post.ID_FIELD_NAME, userPostQb); return postQb.prepare(); //这上面都是参数设置阿 之类的 语法规则我没深入了解 只要知道到时候大概发送的是什么语句就好了 代码直接抄过来 }现在也没碰到有真正在项目中使用这种关系的,只是大概了解了这个查询。感觉还挺麻烦的,对这个框架还是不太熟悉呀。~~