Mybatis 一对多 结果集映射 简单入门 易懂
一、搭建数据库环境
student 表
DROPTABLEIFEXISTS`student_2`;CREATETABLE`student_2`(`id`int(10)NOTNULL,`name`varchar(30)CHARACTERSET utf8COLLATE utf8_general_ciNULLDEFAULTNULL,`tid`int(10)NULLDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE,INDEX`fktid`(`tid`)USINGBTREE,CONSTRAINT`fktid`FOREIGNKEY(`tid`)REFERENCES`teacher`(`id`)ONDELETERESTRICTONUPDATERESTRICT)ENGINE=InnoDBCHARACTERSET= utf8COLLATE= utf8_general_ci ROW_FORMAT= Dynamic;INSERTINTO`student_2`VALUES(1,'小明',1);INSERTINTO`student_2`VALUES(2,'邱ss',2);INSERTINTO`student_2`VALUES(3,'邱大哥',3);INSERTINTO`student_2`VALUES(4,'杨大哥',1);INSERTINTO`student_2`VALUES(5,'杨ss',2);
teacher
DROPTABLEIFEXISTS`teacher`;CREATETABLE`teacher`(`id`int(10)NOTNULLAUTO_INCREMENT,`name`varchar(255)CHARACTERSET utf8COLLATE utf8_general_ciNOTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=4CHARACTERSET= latin1COLLATE= latin1_swedish_ci ROW_FORMAT= Dynamic;-- ------------------------------ Records of teacher-- ----------------------------INSERTINTO`teacher`VALUES(1,'小王老师');INSERTINTO`teacher`VALUES(2,'小李老师');INSERTINTO`teacher`VALUES(3,'小黑老师');
二、idea 搭建maven 项目 (mybatis-demo)
2.1、项目结构
2.2、导入依赖
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies>
2.3、mysql 配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm-study?useSSL=false
jdbc.username=root
jdbc.password=123456
2.4、创建pojo 类
学生
/**
* @Author: crush
* @Date: 2021-06-17 18:23
* version 1.0
*/publicclassStudent{/**
* 学生id
*/privateInteger id;/**
* xueshneg xingming
*/privateString name;/**
* 老师id
*/privateInteger tid;}
老师
/**
* @Author: crush
* @Date: 2021-06-17 18:23
* version 1.0
*/publicclassTeacher{/**
* 老师id
*/privateInteger id;/**
* 老师的姓名
*/privateString name;/**
* 每个老师是不是有很多学生
*/privateList<Student> students;}
2.5、写一个mybatis 的工具类
/**
* @author crush
*/publicclassMybatisUtil{privatestaticSqlSessionFactory sqlSessionFactory;static{try{String resource="mybatis-config.xml";InputStream inputStream=Resources.getResourceAsStream(resource);
sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);}catch(IOException e){
e.printStackTrace();}}publicstaticSqlSessiongetSession(){return sqlSessionFactory.openSession(true);}}
2.7、 写一个TeacherMapper
importcom.crush.pojo.Teacher;importorg.apache.ibatis.annotations.Param;importjava.util.List;publicinterfaceTeacherMapper{// 获取老师List<Teacher>getTeacher();//获取指定老师下的所有学生及老师的信息TeachergetTeacher2(@Param("tid")Integer id);//获取指定老师下的所有学生及老师的信息TeachergetTeacher3(@Param("tid")Integer id);}
写一个TeacherMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.crush.dao.TeacherMapper"><selectid="getTeacher"resultType="Teacher">
select * from teacher</select><selectid="getTeacher2"resultMap="TeacherStudent">
select s.id sid,s.name sname,t.name tname,
t.id tid from student_2 s,teacher t where s.tid=t.id and t.id=#{tid}</select><resultMapid="TeacherStudent"type="Teacher"><resultproperty="id"column="tid"/><resultproperty="name"column="tname"/><!--
复杂的属性,我们需要单独处理 对象 association 集合collection
javaType ="" 是指属性的类型
集合中的泛型的信息 我们使用ofType 获取
--><collectionproperty="students"ofType="Student"><resultproperty="id"column="sid"/><resultproperty="name"column="sname"/><resultproperty="tid"column="tid"/></collection></resultMap><!--========================= 结果集映射=============================--><selectid="getTeacher3"resultMap="TeacherStudent3">
select * from teacher where id=#{tid}</select><resultMapid="TeacherStudent3"type="Teacher"><collectionproperty="students"javaType="ArrayList"ofType="Student"select="getStudentByTeacherId"column="id"/></resultMap><selectid="getStudentByTeacherId"resultType="Student">
select * from student_2 where tid=#{tid}</select></mapper>
2.8、mybatis-config.xml 文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--属性--><propertiesresource="dbconfig.properties"/><!--设置--><settings><!-- STDOUT_LOGGING 打印到控制台 --><settingname="logImpl"value="STDOUT_LOGGING"/><!-- 开启驼峰 --><settingname="mapUnderscoreToCamelCase"value="true"/></settings><!--别名--><typeAliases><!--这是 自己 取别名--><typeAliasalias="Student"type="com.crush.pojo.Student"/><typeAliasalias="Teacher"type="com.crush.pojo.Teacher"/></typeAliases><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"></transactionManager><dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><mappers><mapperresource="mapper/StudentMapper.xml"/><mapperresource="mapper/TeacherMapper.xml"/></mappers></configuration>
测试:
/**
* @Author: crush
* @Date: 2021-06-17 18:22
* version 1.0
*/publicclassMyTest{@TestpublicvoidgetTeacher(){SqlSession session=MybatisUtil.getSession();TeacherMapper mapper= session.getMapper(TeacherMapper.class);List<Teacher> teacher= mapper.getTeacher();System.out.println(teacher);
session.close();}@TestpublicvoidgetTeacher2(){SqlSession session=MybatisUtil.getSession();TeacherMapper mapper= session.getMapper(TeacherMapper.class);Teacher teacher2= mapper.getTeacher2(1);System.out.println(teacher2);
session.close();}@TestpublicvoidgetTeacher3(){SqlSession session=MybatisUtil.getSession();TeacherMapper mapper= session.getMapper(TeacherMapper.class);Teacher teacher2= mapper.getTeacher3(1);System.out.println(teacher2);
session.close();}}
自言自语
难啊,加油吧