在使用select语句时,有时候需要查询两个表,可以使用表连接进行查询,也可以用mybatis给我们提供的collection
标签
collection
标签是在结果集映射的时候添加,也就是在resultMap
标签添加,且不能放在result
标签前面
collection
标签属性有许多,但是基本用法只需要property
、select
、column
例如:
<resultMap>
<id property="结果集映射主键的实体类参数" column="数据库主键字段"></id>
<result property="其他属性" column="数据库其他字段"></result>
<collection property="需要映射的其他实体类" select="dao层进行查询的方法" column="两个数据表之间的关联字段" ></collection>
</resultMap>
上面所写是关于两个表各自查询,然后通过关联的属性获取另外实体类的值,总体代码这里就不贴了,只要记住collection
是关于两个表各自查询,然后调用此标签,association
是用来sql语句表连接查询的时候使用,可在这个标签下再次写入结果集映射
mybatis官网上的结果映射resultMap各个属性详解点击跳转
这里是详细代码,数据库表就不贴了
(1)两个实体类
package com.csh.bean;
public class Activity {
private Integer activityId;
private OrdinaryUser ordinaryUser;
private String theCityName;
private String title;
private String content;
public Integer getActivityId() {
return activityId;
}
public void setActivityId(Integer activityId) {
this.activityId = activityId;
}
public OrdinaryUser getOrdinaryUser() {
return ordinaryUser;
}
public void setOrdinaryUser(OrdinaryUser ordinaryUser) {
this.ordinaryUser = ordinaryUser;
}
public String getTheCityName() {
return theCityName;
}
public void setTheCityName(String theCityName) {
this.theCityName = theCityName;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Activity{" +
"activityId=" + activityId +
", ordinaryUser=" + ordinaryUser +
", theCityName='" + theCityName + '\'' +
", title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
package com.csh.bean;
import java.util.Date;
public class OrdinaryUser {
private String userAccount;
private String pwd;
private Integer sex;
private Date birthday;
public String getUserAccount() {
return userAccount;
}
public void setUserAccount(String userAccount) {
userAccount = userAccount;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "OrdinaryUser{" +
"UserAccount='" + userAccount + '\'' +
", pwd='" + pwd + '\'' +
", sex=" + sex +
", birthday=" + birthday +
'}';
}
}
(2)dao层两个接口
public interface ActivityDao {
public Activity selectAll(Integer activityId);
}
public interface OrdinaryUserDao {
public OrdinaryUser selectAll(String userAccount);
}
(3)两个映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.csh.dao.ActivityDao">
<select id="selectAll" resultMap="activityAll">
select * from activity where activity_id = #{activityId}
</select>
<resultMap id="activityAll" type="com.csh.bean.Activity">
<id property="activityId" column="activity_id"></id>
<result property="theCityName" column="the_city_name"></result>
<result property="title" column="title"></result>
<result property="content" column="content"></result>
<!-- <association property="ordinaryUser" select="com.csh.dao.OrdinaryUserDao.selectAll" column="user_account" >-->
<!-- <id></id>-->
<!-- <result></result>-->
<!-- </association>-->
<!--sql关联。fetchType:懒加载关闭-->
<collection property="ordinaryUser" select="com.csh.dao.OrdinaryUserDao.selectAll" column="user_account" fetchType="eager"></collection>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.csh.dao.OrdinaryUserDao">
<select id="selectAll" resultMap="selectAll">
select * from ordinary_user where user_account = #{userAccount}
</select>
<resultMap id="selectAll" type="com.csh.bean.OrdinaryUser">
<id column="user_account" property="userAccount"></id>
<result property="pwd" column="pwd"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
</resultMap>
</mapper>