08.Mybatis初级使用-resultMap(二)

本文介绍如何在MyBatis中实现一对多关联查询,并使用collection元素进行结果集映射。通过具体示例展示了如何配置XML映射文件以实现从数据库获取角色及其关联的博客列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Collection

collection用法与association类似,只不过collection查询多条记录回填到javabean中
新建数据表blog(id,role_id,title,content),假定role表中记录与rblog表中记录是一对多关系

新建Blog.java
package com.lz.mybatis.model;

public class Blog {

	private Integer id;
	
	private Integer roleId;
	
	private String title;
	
	private String content;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getRoleId() {
		return roleId;
	}

	public void setRoleId(Integer roleId) {
		this.roleId = roleId;
	}

	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 "Blog [id=" + id + ", roleId=" + roleId + ", title=" + title + ", content=" + content + "]";
	}
	
}
新建BlogMapper.java
package com.lz.mybatis.mapper;

import java.util.List;

import com.lz.mybatis.model.Blog;

public interface BlogMapper {

	List<Blog> getBlogByRoleId(Integer roleId);
	
}
新建blogMapper.xml
<?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.lz.mybatis.mapper.BlogMapper">
	<resultMap type="Blog" id="blogResultMap">
		<id property="id" column="id"/>
		<result property="roleId" column="role_id"/>
		<result property="title" column="title"/>
		<result property="content" column="content"/>
	</resultMap>
	
	<select id="getBlogByRoleId" parameterType="java.lang.Integer" resultMap="blogResultMap">
		select * from blog where role_id = #{roleId}
	</select>
</mapper>
修改Role.java
package com.lz.mybatis.model;

import java.util.List;

public class Role {

	private Integer id;

	private String roleName;

	private String note;

	private Job job;

	private List<Blog> blogs;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getRoleName() {
		return roleName;
	}

	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}

	public String getNote() {
		return note;
	}

	public void setNote(String note) {
		this.note = note;
	}

	public Job getJob() {
		return job;
	}

	public void setJob(Job job) {
		this.job = job;
	}

	public List<Blog> getBlogs() {
		return blogs;
	}

	public void setBlogs(List<Blog> blogs) {
		this.blogs = blogs;
	}

	@Override
	public String toString() {
		return "Role [id=" + id + ", roleName=" + roleName + ", note=" + note + "\n job=" + job + "\n blogs=" + blogs
				+ "]";
	}

}
修改roleMapper.xml roleResultMap
<resultMap type="Role" id="roleResultMap">
	<id property="id" column="id"/>
	<result property="roleName" column="role_name"/>
	<result property="note" column="note"/>
	<association property="job" column="id" javaType="Job" 
		select="com.lz.mybatis.mapper.JobMapper.getJobByRoleId"/>
	<collection property="blogs" column="id" javaType="java.util.List" 
		select="com.lz.mybatis.mapper.BlogMapper.getBlogByRoleId"/>
</resultMap>
这样,当我们通过RoleMapper 的getRole方法后得到的Role实例的blogs属性被回填。
查看log
[DEBUG] 2017-03-21 15:13:15,064 org.apache.ibatis.datasource.pooled.PooledDataSource: Created connection 1690254271.
[DEBUG] 2017-03-21 15:13:15,067 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==>  Preparing: select id, role_name, note from role where id = ? 
[DEBUG] 2017-03-21 15:13:15,102 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==> Parameters: 10002(Integer)
[DEBUG] 2017-03-21 15:13:15,124 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ====>  Preparing: select * from job where role_id = ? 
[DEBUG] 2017-03-21 15:13:15,124 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ====> Parameters: 10002(Integer)
[DEBUG] 2017-03-21 15:13:15,127 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: <====      Total: 1
[DEBUG] 2017-03-21 15:13:15,128 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ====>  Preparing: select * from blog where role_id = ? 
[DEBUG] 2017-03-21 15:13:15,129 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ====> Parameters: 10002(Integer)
[DEBUG] 2017-03-21 15:13:15,160 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: <====      Total: 2
[DEBUG] 2017-03-21 15:13:15,161 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: <==      Total: 1
Role [id=10002, roleName=Mybatis, note=Mybatis Learning.
 job=Job [id=1, roleId=10002, position=teacher, salary=10000]
 blogs=[Blog [id=1, roleId=10002, title=TitleA, content=ContentA], Blog [id=2, roleId=10002, title=TitleB, content=ContentB]]]
当然,collection也可以向association那样定义成resultMap形式


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值