SSM框架实战详细教程(十一)MyBatis关联关系之一对多和多对多

本文介绍MyBatis中如何实现一对多关系的数据映射,包括实体类设计、Mapper接口定义及XML配置文件详解,并通过示例演示查询班级及其对应学生的具体实现。

        多对一和一对多是站的角度不同,班级和学生是典型的一对多关系。
        在数据库二维表中,无论是一对多还是多对一都是在多的方建一列引用一的方的主键值。
        而在面向对象的世界里面,是在一的方建多的方的容器型属性。该容器可以是数组、List、Set,在Mybatis中规定的是用List。

public class BanJi {
    private int id;
    private String name;
    private List<Student> stus;

    public List<Student> getStus() {
        return stus;
    }

    public void setStus(List<Student> stus) {
        this.stus = stus;
    }
 }

BanJiDao.java

public interface BanJiDao {
    //只查询班级
    List<BanJi> searchAll();
    //查询出班级以及其对应的多个学生
    List<BanJi> searchAll2();

}

BanJiDao.xml:

<select id="searchAll" resultType="entity.BanJi">
    select * from banji
    </select>
    <select id="searchAll2" resultMap="BjAndStu">
      select bj.id as bjid,bj.name as bj_name,s.* from  banji as bj left join  student as s on s.bj_id=bj.id
    </select>
    
    <resultMap id="BjAndStu" type="entity.BanJi">
        <id column="bjid" property="id"/>
        <result column="bj_name" property="name"/>
        <collection property="stus" ofType="entity.Student">
            <id column="id" property="id"/>
            <result column="name" property="name"/>
            <result column="gender" property="gender"/>
            <result column="age" property="age"/>
        </collection>
    </resultMap>

测试类:

public class TestOne {
    public static void main(String[] args) {
        SqlSession session = MybatisSqlSession.getSqlSession();
        BanJiDao bjDao = session.getMapper(BanJiDao.class);
        List<BanJi> list=bjDao.searchAll2();
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getId() + " " + list.get(i).getName());
            List<Student> stus = list.get(i).getStus();
            if (stus != null) {
                for (Student s : stus) {
                    System.out.println(s.getName());
                }
            }
        }
    }
}

        在MyBatis中,多对多,站在任何一方看,其实都是一对多的关系,所以对于实体的多对多关系,仍旧使用一对多的处理方案,而不像Hibernate和JPA有专门的处理方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值