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());   
    	 } 
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值