基于mybatis的的单表多表查询resultMap用法
对应的老师实体类:
class Teacher{
public class Teacher {
private int id1;
private String name1;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
学生实体类:
public class Student {
private int id;
private String name;
private int age;
private Teacher teacher;
private int tid;
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
}
对应的mybatis中teacherMapper.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="a.b">
<resultMap type="teacher" id="mymap">
<!--主键使用id配置映射关系-->
<id column="id" property="id1"/>
<!--其他列使用result标签配置映射关系,多个列就是用多个result标签-->
<result column="name1" property="name1"/>
</resultMap>
<select id="selAll" resultMap="mymap">
select * from teacher
</select>
<select id="selById" resultType="teacher" parameterType="int">
select * from teacher where id=#{0}
</select>
</mapper>
测试时,与使用autoMappering一样。
测试:
public class Test {
public static void main(String[] args) throws IOException {
InputStream is = (InputStream) Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = (SqlSessionFactory) new SqlSessionFactoryBuilder().build(is);
SqlSession session=factory.openSession();
session.selectList("a.b.selAll");
session.close();
使用resultMap实现关联单个对象(N+1方式查询)
n+1方式查询:先查出某个表的全部信息,根据这个表的信息查询另一个表的信息。
对应的mybatis中studentMapper.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="c.d">
<resultMap type="student" id="stumap">
<!--主键使用id配置映射关系-->
<id column="id" property="id"/>
<!--其他列使用result标签配置映射关系,多个列就是用多个result标签-->
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="tid" property="tid"/>
<!--如果关联一个对象用此标签-->
<association property="teacher" select="a.b.selById" column="tid"></association>
<!--如果关联集合对象-->
<collection property=""></collection>
</resultMap>
<select id="selAll" resultMap="stumap">
select * from student
</select>
</mapper>