mybatis框架有两种关联查询方式,分别为嵌套查询,嵌套结果。嵌套结果只需查询一次所以更为常用。
一、一对一(association)
User基础类
public class User {
private int id;
private String name;
private String password;
}
Article基础类,Article类中包含一个User对象的字段
public class Article {
private int id;
private String time;
private User authorUser;
}
每个Article 中只有一个User字段,故以下为一对一嵌套查询
ArticleMapper.xml中通过嵌套结果查询所有Article
<resultMap id="articleResultMap" type="bean.Article">
<id property="id" column="id"/>
<result property="time" column="time"/>
<association property="authorUser" javaType="User" resultMap="userResultMap"/>
</resultMap>
<resultMap id="userResultMap" type="bean.User">
<id property="id" column="user_id"/>
<result property="name" column="name"/>
<result property="password" column="password"/>
</resultMap>
<select id="selectArticle" resultMap="articleResultMap">
select news.id, time, user_id, name, password from news ,user where user_id = user.id
</select>
ArticleMapper.xml中通过嵌套查询查询所有Article
<!--嵌套查询-->
<resultMap id="articleResultMap" type="bean.Article">
<id property="id" column="id"/>
<result property="time" column="time"/>
<association property="authorUser" column="user_id"
select="mapper.UserMapper.selectUserById">
</association>
</resultMap>
<select id="selectArticle" resultMap="articleResultMap">
select news.id, time, user_id, name, password from news ,user where user_id = user.id
</select>
二、一对多(collection)
User基础类
public class User {
private int id;
private String name;
private String password;
}
Article基础类,Article类中包含多个User对象的字段
public class Article {
private int id;
private String time;
private List<User> authorUser;
}
每个Article 中只有多个User,故以下为一对多嵌套查询
ArticleMapper.xml中通过嵌套结果查询所有Article
<resultMap id="articleResultMap" type="bean.Article">
<id property="id" column="id"/>
<result property="time" column="time"/>
<collection property="authorUser" ofType="User" resultMap="userResultMap"/>
</resultMap>
<resultMap id="userResultMap" type="bean.User">
<id property="id" column="user_id"/>
<result property="name" column="name"/>
<result property="password" column="password"/>
</resultMap>
<select id="selectArticle" resultMap="articleResultMap">
select news.id, time, user_id, name, password from news ,user where user_id = user.id
</select>
ArticleMapper.xml中通过嵌套查询查询所有Article
<!--嵌套查询-->
<resultMap id="articleResultMap" type="bean.Article">
<id property="id" column="id"/>
<result property="time" column="time"/>
<collection property="authorUser" column="user_id" ofType="User"
select="mapper.UserMapper.selectUserById">
</collection>
</resultMap>
<select id="selectArticle" resultMap="articleResultMap">
select news.id, time, user_id, name, password from news ,user where user_id = user.id
</select>