Mybatis怎么实现一对一、一对多关联查询
今天主机评测网小编给大家分享一下Mybatis怎么实现一对一、一对多关联查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Mybatis实现一对一、一对多关联查询,关联查询:多个表联合查询,只查询一次,通过resultMap里面的<association>
、<collection>
标签配置一对一、一对多。
涉及的sql文件、idea工程文件:Mybatis实现一对一、一对多关联查询资源
班级classes、班主任teacher是一对一的关系
班级classes、学生student是一对多的关系
使用IDEA快速构建一个MyBatis工程
pom.xml
<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="maven.apache.org/POM/4.0.0"xmlns:xsi="w3.org/2001/XMLSchema-instance"xsi:schemaLocation="maven.apache.org/POM/4.0.0maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId></groupId><artifactId>sun</artifactId><version>1.0-SNAPSHOT</version><name>mybatisTest</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><mavenpiler.target>1.8</mavenpiler.target><mavenpiler.source>1.8</mavenpiler.source><junit.version>5.8.2</junit.version></properties><dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.13.3</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies><build><resources><resource><!--directory:指定资源文件的位置--><directory>src/main/java</directory><includes><!--“**”表示任意级目录“*”表示任意任意文件--><!--mvnresources:resources :对资源做出处理,先pile阶段--><include>**/*.properties</include><include>**/*.xml</include></includes><!--filtering:开启过滤,用指定的参数替换directory下的文件中的参数(eg.${name})--><filtering>false</filtering></resource><resource><directory>src/main/resources</directory></resource></resources></build></project>
mybatis-config.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""mybatis.org/dtd/mybatis-3-config.dtd"><!--通过这个配置文件完成mybatis与数据库的连接--><configuration><!--引入database.properties文件--><propertiesresource="database.properties"/><!--配置mybatis的log实现为LOG4J--><settings><settingname="logImpl"value="LOG4J"/></settings><environmentsdefault="development"><environmentid="development"><!--配置事务管理,采用JDBC的事务管理--><transactionManagertype="JDBC"></transactionManager><!--POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源--><dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${user}"/><propertyname="password"value="${password}"/></dataSource></environment></environments><!--将mapper文件加入到配置文件中--><mappers><mapperresource="/sun/mapper/ClassesMapper.xml"/></mappers></configuration>
database.properties
driver.mysql.cj.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiuser=rootpassword=root
MybatisUtil.java
package .sun.utils;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importjava.io.InputStream;/***@authorJumperSun*@date2023-03-26-14:46*/publicclassMyBatisUtil{privatestaticSqlSessionFactoryfactory;static{try{InputStreamis=Resources.getResourceAsStream("mybatis-config.xml");factory=newSqlSessionFactoryBuilder().build(is);}catch(Exceptione){e.printStackTrace();}}publicstaticSqlSessioncreateSqlSession(){returnfactory.openSession(false);//true为自动提交事务}publicstaticvoidcloseSqlSession(SqlSessionsqlSession){if(null!=sqlSession)sqlSession.close();}}
Teacher.java
package .sun.pojo;importlombok.Data;/***@authorJumperSun*@date2023-03-26-14:51*/@DatapublicclassTeacher{privateintid;privateStringname;}
Student.java
package .sun.pojo;importlombok.Data;/***@authorJumperSun*@date2023-03-26-14:53*/@DatapublicclassStudent{privateintid;privateStringname;}
Classes.java
package .sun.pojo;importlombok.Data;importjava.util.List;/***@authorJumperSun*@date2023-03-26-14:52*/@DatapublicclassClasses{privateintid;privateStringname;privateTeacherteacher;privateList<Student>studentList;}
classMapper.java
package .sun.mapper;import .sun.pojo.Classes;importorg.apache.ibatis.annotations.Param;importjava.util.List;/***@authorJumperSun*@date2023-03-26-14:54*/publicinterfaceClassesMapper{List<Classes>getClassesTeacher(@Param("id")intid);List<Classes>getClassesTeacherStudentList(@Param("id")intid);}
classMapper.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace=".sun.mapper.ClassesMapper"><!--一对一关联查询--><selectid="getClassesTeacher"parameterType="int"resultMap="ClassesResultMap">select*fromclassesc,teachertwherec.teacher_id=t.t_idandc.c_id=#{id}</select><resultMaptype=".sun.pojo.Classes"id="ClassesResultMap"><!--实体类的字段名和数据表的字段名映射--><idproperty="id"column="c_id"/><resultproperty="name"column="c_name"/><associationproperty="teacher"javaType=".sun.pojo.Teacher"><idproperty="id"column="t_id"/><resultproperty="name"column="t_name"/></association></resultMap><!--一对多关联查询--><selectid="getClassesTeacherStudentList"parameterType="int"resultMap="ClassesResultMap2">select*fromclassesc,teachert,studentswherec.teacher_id=t.t_idandc.c_id=s.class_idandc.c_id=#{id}</select><resultMaptype=".sun.pojo.Classes"id="ClassesResultMap2"><idproperty="id"column="c_id"/><resultproperty="name"column="c_name"/><associationproperty="teacher"javaType=".sun.pojo.Teacher"><idproperty="id"column="t_id"/><resultproperty="name"column="t_name"/></association><collectionproperty="studentList"ofType=".sun.pojo.Student"><idproperty="id"column="s_id"/><resultproperty="name"column="s_name"/></collection></resultMap></mapper>
MapperTest.java
import .sun.mapper.ClassesMapper;import .sun.pojo.Classes;import .sun.utils.MyBatisUtil;importorg.apache.ibatis.session.SqlSession;importorg.junit.Test;importjava.util.List;/***@authorJumperSun*@date2023-03-26-15:10*/publicclassMapperTest{/***测试班级与班主任老师一对一的关联关系*/@Testpublicvoidtest1(){SqlSessionsqlSession=MyBatisUtil.createSqlSession();ClassesMapperclassesMapper=sqlSession.getMapper(ClassesMapper.class);List<Classes>classes=classesMapper.getClassesTeacher(1);for(ClassesClasses:classes){System.out.println(classes);}}/***测试班级与学生一对多关联关系*/@Testpublicvoidtest2(){SqlSessionsqlSession=MyBatisUtil.createSqlSession();ClassesMapperclassesMapper=sqlSession.getMapper(ClassesMapper.class);List<Classes>classes=classesMapper.getClassesTeacherStudentList(1);for(ClassesClasses:classes){System.out.println(classes);}}}
test1:
test2:
总结:一对一关联查询需要在resultMap里面配置association,一对多关联查询需要在resultMap里面配置collection;
Listclasses=classesMapper.getClassesTeacherStudentList(1);for(ClassesClasses:classes){System.out.println(classes);}}}test1:[外链图片转存中...(img-qon5qYiR-1680248446105)]test2:[外链图片转存中...(img-DZayGx8q-1680248446107)]总结:一对一关联查询需要在resultMap里面配置association,一对多关联查询需要在resultMap里面配置collection;
以上就是“Mybatis怎么实现一对一、一对多关联查询”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注主机评测网行业资讯频道。
上一篇:怎么使用sqlalchemy-gbasedbt连接GBase?8s数据库
输入法切换键是哪个键?输入法切
冬月是哪一个月?冬月是什么意思
个人所得税退税金额怎么算出来的
输入法全角和半角有什么区别?输
a4纸尺寸是多少厘米?a4纸的由来
个人所得税扣除标准?个人所得税
输入法哪个好用?输入法介绍
卡拉OK是哪个国家发明的?卡拉OK
mikutools原神网页版入口链接?m
关机特别慢什么原因?电脑和手机