一、数据库设计
create table `teacher`(
`id` int(10) not null,
`name` varchar(30) default null,
primary key(`id`)
)engine=innodb default charset=utf8
insert into teacher(`id`,`name`)values(1,`关老师`);
create table `student`(
`id` int(10) not null,
`name` varchar(30) default null,
`tid` int(10) default null,
primary key(`id`),
key `kftid`(`tid`),
constraint `fktid` foreign key(`tid`)references `teacher`(`id`)
)engine=innodb default charset=utf8
insert into `student`(`id`,`name`,`tid`)values(`1`,`xiaoguan`,`1`);
insert into `student`(`id`,`name`,`tid`)values(`2`,`xiaoliu`,`1`);
insert into `student`(`id`,`name`,`tid`)values(`3`,`xiaodeng`,`1`);
insert into `student`(`id`,`name`,`tid`)values(`4`,`xiaoyue`,`1`);
insert into `student`(`id`,`name`,`tid`)values(`5`,`xiaoqi`,`1`);
二、搭建测试环境
1.IDEA安装lombok插件
2.引入Maven依赖
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.16.10</ version>
</ dependency>
3.在代码中增加注解
@Data
public class Teacher {
private int id;
private String name;
}
@Data
public class Student {
private int id;
private String name;
private Teacher teacher;
}
4.编写实体类对应的Mapper接口
public interface StudentMapper {
}
public interface TeacherMapper {
}
5.编写Mapper接口对应的mapper.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.kuang.mapper.StudentMapper" >
</ 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.kuang.mapper.TeacherMapper" >
</ mapper>
三、按查询嵌套处理
1.给StudentMapper接口增加方法
public List< Student> getStudent ( )
2.编写对应的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.kuang.mapper.StudentMapper" >
< select id = " getStudent" resultMap = " StudentTeacher" >
select *from student
</ select>
< resultMap id = " StudentTeacher" type = " Student" >
< association property = " teacher" column = " tid" javaType = " Teacher" select = " getTeacher" />
</ resultMap>
< select id = " getTeacher" resultType = " teacher" >
select *from teacher where id=#{id}
</ select>
</ mapper>
3.在mybatis配置文件中,注册Mapper
4.注意点说明
< resultMap id = " StudentTeacher" type = " Student" >
< association property = " teacher" column = " {id=tid,name=tid}" javaType = " Teacher" select = " getTeacher" />
</ resultMap>
< select id = " getTeacher" resultType = " teacher" >
select * from teacher where id = #{id} and name = #{name}
</ select>
5.测试
@Test
public void testGetStudents ( ) {
SqlSession session = MybatisUtils. getSession ( ) ;
StudentMapper mapper = session. getMapper ( StudentMapper. class ) ;
List< Student> students = mapper. getStudents ( ) ;
for ( Student student : students) {
System. out. println (
"学生名:" + student. getName ( )
+ "\t老师:" + student. getTeacher ( ) . getName ( ) ) ;
}
}
四、按结果嵌套处理
1.接口方法编写
public List< Student> getStudents2 ( ) ;
2.编写对应的mapper文件
< select id = " getStudents2" resultMap = " StudentTeacher2" >
select s.id sid,s.name sname ,t.name tname
from student s,teacher t
where s.tid = t.id
</ select>
< resultMap id = " StudentTeacher2" type = " Student" >
< id property = " id" column = " sid" />
< result property = " name" column = " sname" />
< association property = " teacher" javaType = " Teacher" >
< result property = " name" column = " tname" />
</ association>
</ resultMap>
3.在mybatis配置文件中,注册Mapper
4.测试
@Test
public void testGetStudents2 ( ) {
SqlSession session = MybatisUtils. getSession ( ) ;
StudentMapper mapper = session. getMapper ( StudentMapper. class ) ;
List< Student> students = mapper. getStudents2 ( ) ;
for ( Student student : students) {
System. out. println (
"学生名:" + student. getName ( )
+ "\t老师:" + student. getTeacher ( ) . getName ( ) ) ;
}
}