Mybatis中Collection集合标签的使用详解
作者:Run4U 发布时间:2023-07-10 05:09:35
标签:Mybatis,Collection,集合
mybatis简单的CURD就不用多说了,网上相关博客文档一大堆。分析一下Mybatis里面的collection聚集查询。
假设一个班级有多名学生为例,通过班级号查询出该班级的信息,和班级里面的所有学生的信息,一般的做法就是通过班级号把班级的信息查询出来,再通过班级ID号把该班级里面的所有学生查询出来,我们不用这种通用的方法
1.班级实体类可以定义为这样:
import java.util.List;
public class ClazzEntity {
private int clazzID;
private String clazzName;
private List<StudentEntity> studentList;
public int getClassID() {
return clazzID;
}
public int getClazzID() {
return clazzID;
}
public void setClazzID(int clazzID) {
this.clazzID = clazzID;
}
public String getClazzName() {
return clazzName;
}
public void setClazzName(String clazzName) {
this.clazzName = clazzName;
}
public List<StudentEntity> getStudentList() {
return studentList;
}
public void setStudentList(List<StudentEntity> studentList) {
this.studentList = studentList;
}
}
学生实体类定义:
package com.cn.hnust.pojo;
public class StudentEntity {
private int stuID;
private String stuName;
private int stuAge;
private String stuAddress;
public int getStuID() {
return stuID;
}
public void setStuID(int stuID) {
this.stuID = stuID;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public String getStuAddress() {
return stuAddress;
}
public void setStuAddress(String stuAddress) {
this.stuAddress = stuAddress;
}
}
2.数据库建表语句:
CREATE TABLE student_t
(
stuno INT PRIMARY KEY,
stuname VARCHAR(20),
stuage INT,
stuaddress VARCHAR(20) ,
classid INT
);
CREATE TABLE class_t
(
classid INT PRIMARY KEY,
classname VARCHAR(20)
);
3.查询ClazzEntity中的学生信息列表StudentEntity,通过mybatis中的collection标签来配置,其中,ofType是查询返回的学生信息对应的实体类,select为要执行的查询学生列表的查询语句,mybatis的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.hnust.dao.InfoManageDao" >
<resultMap id="ClazzResultMap" type="com.cn.hnust.pojo.ClazzEntity" >
<id column="classID" property="clazzID" jdbcType="INTEGER" />
<result column="className" property="clazzName" jdbcType="VARCHAR" />
<collection property="studentList" column="classID" javaType="ArrayList"
ofType="com.cn.hnust.pojo.StudentEntity" select="getStudentByClassID"/>
</resultMap>
<resultMap id="StudentResultMap" type="com.cn.hnust.pojo.StudentEntity">
<id property="stuID" column="stuID" />
<result property="stuName" column="stuName" />
<result property="stuAge" column="stuAge" />
<result property="stuAddress" column="stuAddress" />
</resultMap>
<select id="getClassByID" resultMap="ClazzResultMap" parameterType="java.lang.Integer" >
select classID,className
from class_t
where classID = #{clazzID}
</select>
<select id="getStudentByClassID" resultMap="StudentResultMap" parameterType="java.lang.Integer" >
select stuID,stuName,stuAge,stuAddress,classID
from student_t
where classID = #{clazzID}
</select>
</mapper>
这样就可以查到一个班级的信息,和班级里面的所有学生信息:
ClazzEntity [clazzID=1, clazzName=junior, studentList=[StudentEntity [stuID=1001, stuName=wanghai, stuAge=18, stuAddress=beijing], StudentEntity [stuID=1002, stuName=zhangdong, stuAge=20, stuAddress=shanghai]]]
来源:https://blog.csdn.net/minpann/article/details/51217106/


猜你喜欢
- 为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能。微信支付分为6种支付模式:1.付款
- 本文实例为大家分享了Java实现发送邮件并携带附件的具体代码,供大家参考,具体内容如下一、 邮件服务器与传输协议要在网络上实现邮件功能,必须
- DOM4可以读取和添加XML文件的属性或者元素读取属性:public static void ReadAttributes() throws
- 方法1:C#Label1.Text = Request.Form["txtName"].ToString();vb.ne
- VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch even。Velocit
- Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初
- 之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、线程池核心类、线程池工作流程、线程池分类、拒绝策略、
- 简单的页面分析在上一个文章简单的数据库连接测试,已经测试和数据库做简单的交互,也就是dao层的实现,接下来要说的却是action的简单实现,
- Java方法重写(Override)与重载(Overload)的区别(超详细)首页在我们要学习这个知识点之前,应该要先了解什么是多态?在最初
- 下面通过实例代码给大家分享5种android对话框,具体内容详情如下所示:1 弹出普通对话框 --- 系统更新2 自定义对话框-- 用户登录
- 目录概述事件监听的结构Publisher,Event和Listener的关系事件发布者监听者总结概述ApplicationEvent以及Li
- 1、问题描述几种代码写法会有不同的ID返回值,下面我们一一分析。2、问题分析 首先一种插入写法,源码如下:SysUser .java/**
- 项目中肯定会遇到需要用户自己绘制地形的需求,然后根据地形自动生成房间。下面说说我在绘制地形的实现方法。我们百度可以看到很多关于自己创建mes
- 本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下效果图:具体代码:1.布局文件<?x
- 编写C#程序的时候,我们都遇到过配置文件,而如今绝大多数的配置文件都是用XML写的。所以在处理的时候就需要操作XML文件。那么C#如何操作X
- 下面一段内容有项目需求有项目分析,通过一个小demo给大家展示下C#如何对多线程、多任务管理的。项目需求:假设多个任务需要执行,每个任务不是
- 前言今天刷个题,遇到一个很有趣的问题,关于Comparator的使用,感觉也是一个关于写代码的一些小细节的问题关于ComparatorCom
- JetBrains JVM Debugger Memory View plugin在我最近的研发活动期间寻找新的工具,以提高我的开发经验,使
- 呐呐呐,做Java呢,最重要是要把自己的“作品” 部署到公网上去啦。特别是初学者,需要向面试官证明自己会什么,这个真的就很重要啦,空口无凭,
- 一、问题提出对于线段树,若要求对区间中的所有点都进行更新,可以引入懒操作。懒操作包括区间更新和区间查询操作。二、区间更新对 [l,r] 区间