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.javapackage 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形式