mybatis(7)--自定义结果集(一对多/多对一)

1.数据表

## 一对多数据表
## 创建班级表
create table t_clazz(
    `id` int primary key auto_increment,
    `name` varchar(50)
);

## 插入班级信息
insert into t_clazz(`name`) values(‘javaEE20170228‘);
insert into t_clazz(`name`) values(‘javaEE20170325‘);
insert into t_clazz(`name`) values(‘javaEE20170420‘);
insert into t_clazz(`name`) values(‘javaEE20170515‘);

## 创建学生表
create table t_student(
    `id` int primary key auto_increment,
    `name` varchar(50),
    `clazz_id` int,
    foreign key(`clazz_id`) references t_clazz(`id`)
);

## 插入班级信息
insert into t_student(`name`,`clazz_id`) values(‘stu0228_1‘,1);
insert into t_student(`name`,`clazz_id`) values(‘stu0228_2‘,1);
insert into t_student(`name`,`clazz_id`) values(‘stu0228_3‘,1);
insert into t_student(`name`,`clazz_id`) values(‘stu0325_1‘,2);
insert into t_student(`name`,`clazz_id`) values(‘stu0325_2‘,2);
insert into t_student(`name`,`clazz_id`) values(‘stu0420_1‘,3);

2.Student类和Clazz类

public class Student {
    private Integer id;
    private String name;
}
public class Clazz {
    private Integer id;
    private String name;
    private List<Student> stus;}

3.ClazzMapper接口

public interface ClazzMapper {
    /**
     * 根据班级id的信息,直接查询出班级信息,以及这个班的全部学生信息。
     */
    public Clazz queryClazzByIdForSample(Integer id);

}

4.ClazzMapper.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.cn.mapper.ClazzMapper">

    <resultMap type="com.cn.pojo.Clazz" id="queryClazzByIdForSample_resultMap">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <!--
            collection 标签是专门用来配置集合属性的标签
                property属性设置你要配置哪个集合属性
                ofType 属性设置这个集合中每个元素的具体类型
         -->
        <collection property="stus" ofType="com.cn.pojo.Student">
            <id column="stu_id" property="id"/>
            <result column="stu_name" property="name"/>
        </collection>
    </resultMap>

<!--         /** -->
<!--      * 根据班级id的信息,直接查询出班级信息,以及这个班的全部学生信息。 -->
<!--      */ -->
<!--     public Clazz queryClazzByIdForSample(Integer id); -->
    <select id="queryClazzByIdForSample" resultMap="queryClazzByIdForSample_resultMap">
        select
            t_clazz.*,t_student.id stu_id,t_student.name stu_name
        from
            t_clazz left join t_student
        on
            t_clazz.id = t_student.clazz_id
        where
            t_clazz.id = #{id}
    </select>

</mapper>

5.一对多的懒加载

ClazzMapper接口

/**
     * 根据班级id查询班级信息(只查班级)
     */
    public Clazz queryClazzByIdForTwoStep(Integer id);

StudentMapper接口

public interface StudentMapper {
    /**
     * 根据班级编号查询本班所有学生信息
     */
    public List<Student> queryStudentsByClazzId(Integer clazzId);

}

StudentMapper.xml配置文件:

<mapper namespace="com.cn.mapper.StudentMapper">

<!--     /** -->
<!--      * 根据班级编号查询本班所有学生信息 -->
<!--      */ -->
<!--     public List<Student> queryStudentsByClazzId(Integer clazzId); -->
    <select id="queryStudentsByClazzId" resultType="com.cn.pojo.Student">
        select id,name from t_student where clazz_id = #{clazzId}
    </select>

</mapper>

ClazzMapper.xml配置文件:

<resultMap type="com.cn.pojo.Clazz" id="queryClazzByIdForTwoStep_resultMap">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <!--
            collection 标签是专门用来配置集合属性的(它可以通过调用一个select查询得到需要集合)。
                property属性设置你要配置哪个集合属性
                select 属性设置你要调用哪个查询
                column 将哪个列的值传递给查询做为参数
         -->
        <collection property="stus" column="id"
            select="com.cn.mapper.StudentMapper.queryStudentsByClazzId" />
    </resultMap>

<!--         /** -->
<!--      * 根据班级id查询班级信息(只查班级) -->
<!--      */ -->
<!--     public Clazz queryClazzByIdForTwoStep(Integer id); -->
    <select id="queryClazzByIdForTwoStep" resultMap="queryClazzByIdForTwoStep_resultMap">
        select id,name from t_clazz where id = #{id}
    </select>

原文地址:https://www.cnblogs.com/ywqtro/p/12254346.html

时间: 2024-10-29 11:37:42

mybatis(7)--自定义结果集(一对多/多对一)的相关文章

mybatis(6)--自定义结果集(一对一)

1.自定义结果集介绍 自定义结果集,可以给复杂的对象使用.也就是对象内又嵌套一个对象.或者一个集合.在这种情况下.前面学过的知识点,已经无法直接获取出对象内对象的信息.这个时候就需要使用resultMap自定义结果集来返回需要的数据. 2.创建数据表的sql ## 一对一数据表 ## 创建锁表 create table t_lock( `id` int primary key auto_increment, `name` varchar(50) ); ## 创建钥匙表 create table

mybatis 一对一 一对多 多对多

一对一 一对多 多对多 原文地址:https://www.cnblogs.com/cwone/p/11909271.html

hibernate 一对多|多对一

一对多:(一个客户对应多个联系人) 客户实体:Customer.java package cn.future.domain; import java.util.HashSet; import java.util.Set; public class Customer { /* * CREATE TABLE `cst_customer` ( `cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` VAR

Struts2之—自定义结果集实现ajax

项目中我们经常遇到这样的需求--页面部分刷新,例如:添加用户,转到添加用户页面时,页面自动加载了所有部门. 完整流程:选择所属部门,填写用户名和密码,点击"注册" 填写用户名后,需要立即检查数据库是否存在此用户名,如何在不刷新页面的情况下实现此效果? 但看上面提出的问题并不难,情况很常见,都知道使用ajax实现,但是如何在struts中自定义结果集来实现ajax--这是这篇博客的重点. (注:servlet要么转发要么重定向,struts2可以自定义结果集) 转发.重定向.action

框架 day32 Hibernate,一级缓存,关联关系映射(一对多,多对多)

一级缓存 概念 *在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java集合构成了Session缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期 *当session的save()方法持久化一个对象时,该对象被载入缓存, 以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中. 当试图get(). load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库.没有再查询数据库 *Session 能够在

COM inerop 创建自定义互操作集 问题

1.如果com是由.net实现 则在用自定义互操作集时,会发生类型转换错误.如下: [ComImport]    [Guid("06521B83-FDE4-4882-9E29-3812D6A59AA8")]     class NetComponentWraper    {    }    [ComImport]    [CoClass(typeof(NetComponentWraper))]    [Guid("038AFEB5-A5B9-4944-8B3F-BA031A1

DjangoORM一对多&多对多操作

简要说明 通过操作对象的方式操作数据库 详细步骤 models.py的结构是: 如果models.py中外键定义没有写 related_name='student_teacher', 可以直接用 studentList = teacher.student_teacher.all() 可以改写成: teacher = Teacher.objects.get(id = 1) studentList = teacher.student_set.all() =======================

PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本)

  1:运行  PowerDesigner15_Evaluation.exe 默认   2: 安装完毕后,不要执行,下面我们进行 破解 把 PowerDesigner15汉化+注册补丁  下的所有文件,覆盖 PD的安装目录下的文件 然后我们打开 PD,点击 帮助 –> About  看到下面窗口中红色方框,就表示已经破解 + 汉化成功 PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本)

Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set<String> address; private List<String> addressList = new ArrayList<String>(); //private Str