MyBatis:3、级联查询

本文介绍了一对多及多对多关系在MyBatis中的实现方式,包括对应的Java实体类定义、XML映射文件配置以及数据库查询语句。通过具体的例子展示了如何在Student和Classes、Customer和Goods等实体间建立级联查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

级联查询

  • 一对多

    Student.java:

    package com.xiaoxin.entity;
    
    import lombok.Data;
    
    @Data
    public class Student {
       private long id;
       private String name;
       private Classes classes;
    }
    

    Classes.java:

    package com.xiaoxin.entity;
    
    import java.util.List;
    import lombok.Data;
    
    @Data
    public class Classes {
       private long id;
       private String name;
       private List<Student> students;
    }
    

    StudentRepository.java:

    package com.xiaoxin.repository;
    
    import com.xiaoxin.entity.Student;
    
    public interface StudentRepository {
        public Student findById(long id);
    }
    

    StudentRepository.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xiaoxin.repository.StudentRepository">
    
        <resultMap id="StudentMap" type="com.xiaoxin.entity.Student">
            <id column="id" property="id"/>
            <result column="name" property="name"/>
            <association property="classes" javaType="com.xiaoxin.entity.Classes">
                <id column="cid" property="id"/>
                <result column="cname" property="name"/>
            </association>
        </resultMap>
    
        <select id="findById" parameterType="long" resultMap="StudentMap">
            select s.id, s.name, c.id cid, c.name cname from student s, classes c where  s.cid = c.id and s.id=#{id}
        </select>
    </mapper>
    

    config.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="mydev">
            <environment id="mydev">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/xiaoxin/mapper/AccountMapper.xml"/>
            <mapper resource="com/xiaoxin/repository/AccountRepository.xml"/>
            <mapper resource="com/xiaoxin/repository/StudentRepository.xml"/>
        </mappers>
    </configuration>
    

    ClassRepository.java:

    package com.xiaoxin.repository;
    
    import com.xiaoxin.entity.Classes;
    
    public interface ClassesRepository {
        public Classes findById(long id);
    }
    
    

    ClassesRepository.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xiaoxin.repository.ClassesRepository">
    
        <resultMap id="ClassesMap" type="com.xiaoxin.entity.Classes">
            <id column="cid" property="id"/>
            <result column="cname" property="name"/>
            <collection property="students" ofType="com.xiaoxin.entity.Student">
                <id column="id" property="id"/>
                <result column="name" property="name"/>
            </collection>
        </resultMap>
    
        <select id="findById" parameterType="long" resultMap="ClassesMap">
            select c.id as cid, c.name as cname, s.id, s.name from student s, classes c where c.id = s.cid and c.id = #{id}
        </select>
    </mapper>
    

    config.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="mydev">
            <environment id="mydev">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/xiaoxin/mapper/AccountMapper.xml"/>
            <mapper resource="com/xiaoxin/repository/AccountRepository.xml"/>
            <mapper resource="com/xiaoxin/repository/StudentRepository.xml"/>
            <mapper resource="com/xiaoxin/repository/ClassesRepository.xml"/>
        </mappers>
    </configuration>
    
  • 多对多

    Customer:

    package com.xiaoxin.entity;
    
    import lombok.Data;
    import java.util.List;
    
    @Data
    public class Customer {
        private long id;
        private String name;
        private List<Goods> goodsList;
    }
    

    CustomerRepository:

    package com.xiaoxin.repository;
    
    import com.xiaoxin.entity.Customer;
    
    public interface CustomerRepository {
        public Customer findById(long id);
    }
    

    CustomerRepository.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xiaoxin.repository.CustomerRepository">
        <resultMap id="CustomerMap" type="com.xiaoxin.entity.Customer">
            <id column="cid" property="id"/>
            <result column="cname" property="name"/>
            <collection property="goodsList" ofType="com.xiaoxin.entity.Goods">
                <id column="gid" property="id"/>
                <result column="gname" property="name"/>
            </collection>
        </resultMap>
    
       <select id="findById" parameterType="long" resultMap="CustomerMap">
            select c.id cid, c.name cname, g.id gid, g.name gname
            from customer c, goods g, customer_goods cg
            where c.id=cg.cid and g.id=cg.id and c.id=#{id}
        </select>
    </mapper>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值