MyBatis多对一处理

简介: MyBatis多对一处理

按照查询嵌套处理


前提:将Student,Teacher实体类根据数据库创建好,接口还有所对应的xml文件

1、然后在StudentMapper接口增加方法

//获取所有学生及对应老师的信息 
public List<Student> getStudents();


2、编写对应的Mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--configuration核心配置文件-->
<mapper namespace="com.zang.dao.StudentMapper">
<!--    需求:获取所有学生及对应的老师信息
        思路:
            1.获取所有学生的信息
            2.根据获取的学生信息的老师ID->获取该老师的信息
            3.思考问题,这样学生的结果集中应该包含该老师,该如何处理呢,
数据库中我们一般使用关联查询
                1.做一个结果集映射:StudentTeacher
                2.StudentTeacher结果集的类型为Student
                3.学生中老师的属性为teacher,对应数据库id为tid
                    多个学生关联一个老师
                4.查看官网找到:association一个复杂类型的关联:使用他
处理关联查询
-->
        <select id="getStudents" resultMap="StudentTeacher">
            select * from student
        </select>
    <resultMap id="StudentTeacher" type="Student">
        <!--association关联属性  property属性名 javaType属性类型 column在多 的一方的表中的列名
        -->
        <association property="tecaher" column="tid" javaType="Teacher" select="getTeacher"/>
    </resultMap>
     <!--    这里传递过来的id,只有一个属性的时候,下面可以写任何值    
        association中column多参数配置:        
            column="{key=value,key=value}"
            其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的 字段名-->
    <select id="getTeacher" resultType="teacher">
        select * from teacher where id=#{id}
    </select>
</mapper>


3、写完之后去MyBatis配置文件中注册Mapper

4、

@Test 
public void testGetStudents(){    
SqlSession session = MybatisUtils.getSession();    
StudentMapper mapper = session.getMapper(StudentMapper.class);
    List<Student> students = mapper.getStudents();
    for (Student student : students){        
    System.out.println(                
    "学生名:"+ student.getName()                        
    +"\t老师:"+student.getTeacher().getName());   
       } 
    }


按照结果嵌套处理

1、接口方法编写

public List<Student> getStudents2();


2、编写mapper文件

<!--
按查询结果嵌套处理
思路:
  1.直接查询出结果,进行结果集的映射
-->
<select id="getStudent" resultMap="StudentTeacher">
    select s.id sid,s.name sname,t.name tname
    from student s,teacher t
    where s.id=t.id
</select>
<resultMap id="StudentTeacher" type="Student">
<id property="id " column="sid"/>
<result property="name" column="sname"/>
<!--关联对象property 关联对象在Student实体类中的属性
-->
<association property="teacher" javaType="Teacher">
    <result property="name" column="tname"/>
</association>
</resultMap>


3、去mybatis-config文件中注入

4、测试

@Test 
public void testGetStudents2(){    
SqlSession session = MybatisUtils.getSession();    
StudentMapper mapper = session.getMapper(StudentMapper.class);
    List<Student> students = mapper.getStudents();
    for (Student student : students){        
    System.out.println(                
    "学生名:"+ student.getName()                        
    +"\t老师:"+student.getTeacher().getName());   
       } 
    }


相关文章
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
6月前
|
XML Java 数据库连接
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
128 0
|
6月前
|
XML SQL Java
mybatis的一对多,多对一,以及多对对的配置和使用
mybatis的一对多,多对一,以及多对对的配置和使用
35 2
|
SQL Java 关系型数据库
mybatis多对一和一对多查询数据处理解读(下)
mybatis多对一和一对多查询数据处理解读(下)
|
SQL Java 数据库连接
MyBatis多对一的映射 一对多的映射
MyBatis多对一的映射 一对多的映射
111 0
|
6月前
|
Java 数据库连接 mybatis
一文彻底搞懂Mybatis系列(十二)之MyBatis多对一映射延迟加载(association和lazyLoadingEnabled)
一文彻底搞懂Mybatis系列(十二)之MyBatis多对一映射延迟加载(association和lazyLoadingEnabled)
108 0
|
6月前
|
Java 数据库连接 mybatis
一文彻底搞懂Mybatis系列(十一)之MyBatis多对一映射查询
一文彻底搞懂Mybatis系列(十一)之MyBatis多对一映射查询
|
SQL Java 数据库连接
【Mybatis用法】Mybatis 高级结果映射,ResultMap Association,mybatis的一对多,多对一,以及多对多的配置和使用
【Mybatis用法】Mybatis 高级结果映射,ResultMap Association,mybatis的一对多,多对一,以及多对多的配置和使用
163 0
|
Java 数据库连接 测试技术
如何使用mybatis处理数据库关系中的多对一关系呢?
如何使用mybatis处理数据库关系中的多对一关系呢?