Mybatis框架-----Mybatis 关联查询
文章目录
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
mybatis核心文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入文件-->
<properties resource="db.properties"/>
<!-- //开发环境为开发环境-->
<environments default="development">
<environment id="development">
<!-- 事务节点 JDBC是以jdbc的提交和回滚-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配制数据源-->
<dataSource type="POOLED">
<!-- 数据库池连接-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- //引入映射文件-->
<mappers>
<!-- //相对路径-->
<mapper resource="mapper/StudentMapper.xml"/>
<mapper resource="mapper/TeacherMapper.xml"/>
<mapper resource="mapper/ClassMapper.xml"/>
</mappers>
</configuration>
jar包
<dependencies>
<!-- mybatis的资源包 数据库驱动包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
pojo
package mybatis.bean;
import java.util.List;
public class Class {
private int cid ; //班级编号
private String cname ; //班级名称
private List<Student> studentList; //学生列表
private List<Teacher> teacherList ;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public List<Student> getStudentList() {
return studentList;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}
public List<Teacher> getTeacherList() {
return teacherList;
}
public void setTeacherList(List<Teacher> teacherList) {
this.teacherList = teacherList;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Class{");
sb.append("cid=").append(cid);
sb.append(", cname='").append(cname).append('\'');
sb.append(", studentList=").append(studentList);
sb.append(", teacherList=").append(teacherList);
sb.append('}');
return sb.toString();
}
}
package mybatis.bean;
public class Student {
private int studentId ;
private String studentName ;
private String studentSex ;
private String studentTel ;
private Class classes ;
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getStudentSex() {
return studentSex;
}
public void setStudentSex(String studentSex) {
this.studentSex = studentSex;
}
public String getStudentTel() {
return studentTel;
}
public void setStudentTel(String studentTel) {
this.studentTel = studentTel;
}
public Class getClasses() {
return classes;
}
public void setClasses(Class classes) {
this.classes = classes;
}
@Override
public String
toString() {
final StringBuilder sb = new StringBuilder("Student{");
sb.append("studentId=").append(studentId);
sb.append(", studentName='").append(studentName).append('\'');
sb.append(", studentSex='").append(studentSex).append('\'');
sb.append(", studentTel='").append(studentTel).append('\'');
sb.append(", classes=").append(classes);
sb.append('}');
return sb.toString();
}
}
package mybatis.bean;
import java.util.List;
public class Teacher {
private int tid ;
private String tname ;
private List<Class> classList;
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public List<Class> getClassList() {
return classList;
}
public void setClassList(List<Class> classList) {
this.classList = classList;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Teacher{");
sb.append("tid=").append(tid);
sb.append(", tname='").append(tname).append('\'');
sb.append(", classList=").append(classList);
sb.append('}');
return sb.toString();
}
}
mapper接口和mapper映射文件
log4j.properties
log4j.rootLogger=debug,console
### appender.console输出到控制台 ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=<%d> %5p (%F:%L) [%t] (%c) - %m%n
log4j.appender.console.Target=System.out
## appender.logfile输出到日志文件 ###
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=SysLog.log
log4j.appender.logfile.MaxFileSize=500KB
log4j.appender.logfile.MaxBackupIndex=7
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=<%d> %p (%F:%L) [%t] %c - %m%n
数据库文件
/*
SQLyog Ultimate v12.08 (64 bit)
MySQL - 5.5.12 : Database - test2
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test2` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
USE `test2`;
/*Table structure for table `class` */
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT COMMENT '班级编号',
`cname` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '班级名称',
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*Data for the table `class` */
insert into `class`(`cid`,`cname`) values (1,'静态网页编程'),(2,'Java'),(3,'数据库编程');
/*Table structure for table `student` */
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`studentId` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生id',
`studentName` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '学生姓名',
`studentSex` char(1) COLLATE utf8_bin DEFAULT NULL COMMENT '学生性别',
`studentTel` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '学生电话',
`classid` int(11) NOT NULL COMMENT '学生班级',
PRIMARY KEY (`studentId`,`classid`),
KEY `fk_stu_class_cid` (`classid`),
CONSTRAINT `fk_stu_class_cid` FOREIGN KEY (`classid`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*Data for the table `student` */
insert into `student`(`studentId`,`studentName`,`studentSex`,`studentTel`,`classid`) values (1,'张三1','男','123456',1),(2,'张三2','男','123456',2),(3,'张三3',NULL,NULL,1),(4,'张三4',NULL,NULL,1),(5,'张三5',NULL,NULL,1),(6,'张三6',NULL,NULL,1);
/*Table structure for table `teacher` */
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`tid` int(11) NOT NULL,
`tname` varchar(100) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*Data for the table `teacher` */
insert into `teacher`(`tid`,`tname`) values (1,'张老师'),(2,'徐老师');
/*Table structure for table `teacher_class` */
DROP TABLE IF EXISTS `teacher_class`;
CREATE TABLE `teacher_class` (
`cid` int(11) NOT NULL COMMENT '班级编号',
`tid` int(11) NOT NULL COMMENT '老师编号',
PRIMARY KEY (`cid`,`tid`),
KEY `fk_teachertoClass_teacher` (`tid`),
CONSTRAINT `fk_teachertoClass_class` FOREIGN KEY (`cid`) REFERENCES `class` (`cid`),
CONSTRAINT `fk_teachertoClass_teacher` FOREIGN KEY (`tid`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*Data for the table `teacher_class` */
insert into `teacher_class`(`cid`,`tid`) values (1,1),(2,2);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
数据库引入文件db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test2
jdbc.username=root
jdbc.password=123456
测试文件
import mybatis.bean.Class;
import mybatis.bean.Student;
import mybatis.bean.Teacher;
import mybatis.mapper.ClassMapper;
import mybatis.mapper.StudentMapper;
import mybatis.mapper.TeacherMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Test {
InputStream inputStream = null;
SqlSession sqlSession = null ;
@Before
public void before () throws IOException {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
sqlSession = factory.openSession();
}
@After
public void after() throws IOException {
sqlSession.close();
inputStream.close();
}
@org.junit.Test
public void testAllStudents() throws IOException {
StudentMapper studentMapper =
sqlSession.getMapper(StudentMapper.class);
List<Student>students = studentMapper.selectAllStudents();
students.forEach(System.out::println);
}
@org.junit.Test
public void testAllStudentsInClass() throws IOException {
ClassMapper classMapper =
sqlSession.getMapper(ClassMapper.class);
List<Class> classList = classMapper.selectAllStudentsByClass();
classList.forEach(System.out::println);
}
@org.junit.Test
public void testAllTeachers() throws IOException {
TeacherMapper teacherMapper =
sqlSession.getMapper(TeacherMapper.class);
List<Teacher> teachers = teacherMapper.findAll();
teachers.forEach(System.out::println);
}
}
🔥一、一对一查询
映射文件
mapper接口
测试
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🔥二、一对多查询
映射文件。
mapper接口
测试
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🔥三、多对多查询
mapper接口
映射文件
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨