在使用select语句时,有时候需要查询两个表,可以使用表连接进行查询,也可以用mybatis给我们提供的collection标签
collection标签是在结果集映射的时候添加,也就是在resultMap标签添加,且不能放在result标签前面
collection标签属性有许多,但是基本用法只需要propertyselectcolumn
例如:

<resultMap>
	<id property="结果集映射主键的实体类参数" column="数据库主键字段"></id>
	<result property="其他属性" column="数据库其他字段"></result>
	<collection property="需要映射的其他实体类" select="dao层进行查询的方法" column="两个数据表之间的关联字段" ></collection>
	
</resultMap>

上面所写是关于两个表各自查询,然后通过关联的属性获取另外实体类的值,总体代码这里就不贴了,只要记住collection 是关于两个表各自查询,然后调用此标签,association是用来sql语句表连接查询的时候使用,可在这个标签下再次写入结果集映射
mybatis官网上的结果映射resultMap各个属性详解点击跳转
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>
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐