正文  数据库 > 数据库/SQLite >

Android开发中ormlite多对多关联映射

主要是了解查询方式 这个映射倒是很好理解 在除了建立2个有多对多关系的实体类表之外还需要一张中间表大概是这么个意思user user_id namepostmpost_id contents userpost userpost_id user_id post_id ...

主要是了解查询方式 这个映射倒是很好理解 在除了建立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();  //这上面都是参数设置阿 之类的 语法规则我没深入了解 只要知道到时候大概发送的是什么语句就好了 代码直接抄过来
 }
 
 现在也没碰到有真正在项目中使用这种关系的,只是大概了解了这个查询