mybatis一对多关联查询两种方式

mybatis一对多关联查询两种方式mybatis 一对多关联查询两种方式前提 方式一 方式二 前提 现在有两张表 学生表跟教师表 一个教师对应多个学生教师表 CREATETABLE teacher id int 11 PRIMARYKEY name varchar 20 age int 11 address varchar 100 PRIMARYKEY

mybatis一对多关联查询两种方式

前提:

现在有两张表,学生表跟教师表,一个教师对应多个学生

教师表: CREATE TABLE `teacher` ( `id` int(11) , `name` varchar(20) , `age` int(11) , `address` varchar(100) , PRIMARY KEY (`id`) ) 学生表: CREATE TABLE `student` ( `id` int(11) , `ter_id` int(10) , `name` varchar(255) , `phone` varchar(255) , `address` varchar(255) , `birthDay` date , PRIMARY KEY (`id`) ) 

方式一:

1.直接写多表联合查询sql,mapper文件对应好相应的实体类即可。
需要注意的两个点:


A.用分页插件pageHelper的时候,该种方式会导致查询错乱。
B.如果几个表有字段名相同的情况,字段赋值可能被覆盖。我们可以给字段取别名的方式来解决,如下:




SELECT tea.id, tea.NAME, tea.age, tea.address, stu.id stu_id, stu.ter_id stu_ter_id, stu.NAME stu_name, stu.phone stu_phone, stu.address stu_address, stu.birthday stu_birthday FROM teacher tea, student stu WHERE tea.id = stu.ter_id 

2.具体实现代码:

实体类Teacher.java 和 Student.java:

package com.shushan.entity; import java.util.List; public class Teacher { private Integer id; private String name; //姓名 private Integer age; //年龄 private String address; //地址 private List 
  
    stuList; //学生集合 setter方法... getter方法... } 
  
package com.shushan.entity; import java.util.Date; public class Student { private Integer id; private Integer terId; //教师id private String name; //姓名 private String phone; //电话 private String address; //地址 private Date birthDay; //生日 setter方法... getter方法... } 

mapper.xml文件

 
   
   
    
     
     
     
     
     
     
      
      
      
      
      
      
     
    
    
   

dao层代码:

package com.shushan.dao; import com.shushan.entity.Teacher; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMultipleDao { / * 一对多查询:方式一 * @param teacher * @return */ public List 
  
    getTeacherList(Teacher teacher); } 
  

方式二:

1.采用子查询的方式。mapper.xml中对应好主表跟次表查询关系。
2.代码实现


实体类Teacher.java 和 Student.java:

详细见方式一 

mapper.xml

 
   
   
    
     
     
     
     
     
     
    
    
     
     
     
     
     
     
    
    
    
    
   

dao层代码:

package com.shushan.dao; import com.shushan.entity.Teacher; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMultipleTwoDao { / * 一对多查询:方式二 * @param teacher * @return */ public List 
  
    getTeacherTwoList(Teacher teacher); } 
  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202156.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午7:46
下一篇 2026年3月20日 上午7:46


相关推荐

  • 局域网广域网区别_局域网和广域网的简称

    局域网广域网区别_局域网和广域网的简称一、局域网 局域网(LocalAreaNetwork),简称LAN,是指在某一区域内由多台计算机互联成的计算机组。“某一区域”指的是同一办公室、同一建筑物、同一公司和同一学校等,一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算

    2026年4月13日
    4
  • java%f什么意思_浅析Java中print、printf、println的区别「建议收藏」

    java%f什么意思_浅析Java中print、printf、println的区别「建议收藏」printf主要是继承了C语言的printf的一些特性,可以进行格式化输出print就是一般的标准输出,但是不换行println和print基本没什么差别,就是最后会换行System.out.printf(“thenumberis:d”,t);参照JAVAAPI的定义如下:’d’整数结果被格式化为十进制整数’o’整数结果被格式化为八进制整数’x’,’X’整数结果被格式化为十六…

    2022年7月8日
    24
  • java中instant_Instant

    java中instant_Instant我们已经讲过 计算机存储的当前时间 本质上只是一个不断递增的整数 Java 提供的 System currentTimeM 返回的就是以毫秒表示的当前时间戳 这个当前时间戳在 java time 中以 Instant 类型表示 我们用 Instant now 获取当前时间戳 效果和 System currentTimeM 类似 importjava time public

    2026年3月19日
    1
  • PostGIS 报错libcrypto[通俗易懂]

    PostGIS 报错libcrypto[通俗易懂]说明在安装完Postgresql以后,打postgis扩展时,报错ERROR:couldnotloadlibrary”/usr/pgsql-12/lib/rtpostgis.so”:/usr/pgsql-12/lib/libpq.so.10:symbolX509_get_signature_nid,versionlibcrypto.so.10notdefinedinfilelibcrypto.so.10withlinktimereference出现问题环境

    2022年6月26日
    60
  • python语言合法变量命名规则_下列不符合Python语言变量命名规则的是??????????????????????????????????????????????????????????????…[通俗易懂]

    python语言合法变量命名规则_下列不符合Python语言变量命名规则的是??????????????????????????????????????????????????????????????…[通俗易懂]下列不符合Python语言变量命名规则的是????????????????????????????????????????????????????????????????????????????????答:3_1已经声明了一个局部变量@n,在下列语句中,能对该变量正确赋值的是(??)答:SELECT?@n=’HELLO’婴儿动作的发展相对落后感觉的发展答:正确下列哪些是昆虫的附肢(?)答:触角…

    2022年5月15日
    44
  • Spring Boot 入门教程

    Spring Boot 入门教程SpringBoot说是一全新框架,但实质上还是我们的Spring。只是它帮我们做了那些SpringBean配置,比如那堆恶心的xml。它使用“习惯优于配置”,就是默认给你配置了项目构建时都需要的配置,并且内嵌了tomcat,让你基本不用写配置文件就能轻松搭建一个项目。这里我用的是Idea2017和java8(理论上java6以上就可以)1.0 用SpringInitializr

    2022年7月15日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号