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

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);

}

你可能感兴趣的:(项目搭建,mybatis,Java,mybatis一对多)