测试环境搭建
1.导入lombok
2.创建数据库
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 fktid (tid),
CONSTRAINT fktid FOREIGN KEY (tid) REFERENCES teacher (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO student (id, name, tid) VALUES ('1', '小明', '1');
INSERT INTO student (id, name, tid) VALUES ('2', '小红', '1');
INSERT INTO student (id, name, tid) VALUES ('3', '小张', '1');
INSERT INTO student (id, name, tid) VALUES ('4', '小李', '1');
INSERT INTO student (id, name, tid) VALUES ('5', '小王', '1');
3.新建实体类Teacher,Student
package com.xu.pojo; import lombok.Data; @Data public class Student { private int id; private String name; private Teacher teacher; }
package com.xu.pojo; import lombok.Data; @Data public class Teacher { private int id; private String name; //学生需要关联一个老师! private Teacher teacher; }
4.建立Mapper接口
package com.xu.dao; public interface StudentMapper { }
package com.xu.dao; import com.xu.pojo.Teacher; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; public interface TeacherMapper { @Select("select * from teacher where id = #{id}") Teacher getTeacher(@Param("id") int id); }
5.建立Mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xu.dao.TeacherMapper"> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xu.dao.StudentMapper"> </mapper>
6.在核心配置文件中绑定注册我们的Mapper接口或者文件【方式很多,随心选】
<mappers> <mapper class="com.xu.dao.TeacherMapper"/> <mapper class="com.xu.dao.StudentMapper"/> </mappers>
7.测试查询是否能够成功!
import com.xu.dao.TeacherMapper; import com.xu.pojo.Teacher; import com.xu.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import java.util.Arrays; public class mytest { public static void main(String[] args) { SqlSession sqlSession = MybatisUtils.getSqlSession(); TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class); Teacher teacher = mapper.getTeacher(1); System.out.println(teacher); sqlSession.close(); } }
接下就可以开始我们的多对一查询
按照查询嵌套处理
<?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.xu.dao.StudentMapper"> <!-- 思路: 1.查询所有学生信息 2.根据查询出来的学生id,寻找对应的老师! --> <select id="getStudent" resultMap="StudentTeacher"> select * from student </select> <resultMap id="StudentTeacher" type="Student"> <result property="id" column="id"/> <result property="name" column="name"/> <!--复杂的属性,我们需要单独处理 对象:association 集合:collection --> <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/> </resultMap> <select id="getTeacher" resultType="Teacher"> select * from teacher where id=#{id} </select> </mapper>
按照结果嵌套处理
<!-- 按照结果嵌套处理 --> <select id="getStudent2" resultMap="StudentTeacher2"> select s.id sid, s.name sname,t.name tname, t.id tid from student s,teacher t where s.tid=t.id ; </select> <resultMap id="StudentTeacher2" type="Student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <association property="teacher" column="tid" javaType="Teacher"> <result property="name" column="tname"/> <result property="id" column="tid"/> </association> </resultMap>
接口:Student
public List<Student> getStudent(); public List<Student> getStudent2();
查询结果: