MyBatis(8)——联表多对一的处理
xml说明:
<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性-->
<resultMap id="唯一的标识" type="映射的pojo对象">
<id column="表的主键字段,或者可以为查询语句中的别名字段" jdbcType="字段类型" property="映射pojo对象的主键属性" />
<result column="表的一个字段(可以为任意表的一个字段)" jdbcType="字段类型" property="映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)"/>
<association property="pojo的一个对象属性" javaType="pojo关联的pojo对象">
<id column="关联pojo对象对应表的主键字段" jdbcType="字段类型" property="关联pojo对象的主席属性"/>
<result column="任意表的字段" jdbcType="字段类型" property="关联pojo对象的属性"/>
</association>
<!-- 集合中的property须为oftype定义的pojo对象的属性-->
<collection property="pojo的集合属性" ofType="集合中的pojo对象">
<id column="集合中pojo对象对应的表的主键字段" jdbcType="字段类型" property="集合中pojo对象的主键属性" />
<result column="可以为任意表的字段" jdbcType="字段类型" property="集合中的pojo对象的属性" />
</collection>
</resultMap>
1.根据查询进行嵌套
1.创建实体类。编写映射文件,编写多表查询语句,例如:
//------------映射文件------------//
<?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">
<!-- 命名空间:防止sql语句的id重名
格式:包名+类名/包名+mapper文件名
parameterType:sql语句传参类型
resultType:返回结果类型
useGeneratedKeys:使用自增主键
-->
<mapper namespace="cn.aaa.entity.student.mapper">
<select id="getStudent" resultMap="StudentTeacher">
select s.id sid,s.name sname,t.id tid,t.name tname from students s,teacher t where s.id=t.id
</select>
<!-- 查询结果是student,column也可以填写查询出来的表的别名 -->
<resultMap id="StudentTeacher" type="Student">
<id column="sid" property="id" />
<result column="sname" property="name"/>
<!-- 关联对象property 关联对象在student在实体类中的属性 -->
<association property="teacher" javaType="Teacher">
<id column="tid" property="id"/>
<result column="tname" property="name"/>
</association>
</resultMap>
</mapper>
2.修改对应的dao类,例如:
//------------dao接口类------------//
//分页查询所有的值1,以map传递参数
public List<Student> selectAll() throws IOException
{
SqlSession session=MyBatisUtil.getSession();
List<Student> list=session.selectList("cn.lxy.entity.student.mapper.getStudent");
session.close();
return list;
}
3.编写测试类
//------------测试类------------//
public static void main(String[] args) throws IOException {
SqlSession session=MyBatisUtil.getSession();
//此处用session的映射方法实现接口,直接把接口类当作映射处理
List<Student> list=new StudentDao().selectAll();
for(Student s:list)
{
System.out.println(s);
}
}
2.根据结果进行嵌套
1.映射文件中编写查询所有的信息,例如:
//------------映射文件------------//
<select id="getStudent" resultMap="StudentTeacher">
select * from students
</select>
2.再对结果集进行映射处理,例如:
//------------映射文件------------//
<resultMap id="StudentTeacher" type="Student">
<!--此处的selelct属性关联一个新的mapper文件,但也可以直接写成select标签和对应语句-->
<association property="teacher" column="tid" javaType="Teacher" select="cn.lxy.entity.teacher.mapper.getTeacher">
</association>
</resultMap>
或
//------------映射文件------------//
<select id="getStudent" resultMap="StudentTeacher">
select * from students
</select>
<resultMap id="StudentTeacher" type="Student">
<association property="teacher" column="tid" javaType="Teacher" select="cn.lxy.entity.teacher.mapper.getTeacher">
</association>
</resultMap>
<select id="getTeacher" resultType="Teacher">
select * from teacher where id=#{id}
</select>
3.修改对应的dao类和测试类(同1)
MyBatis(8)——联表多对一的处理的更多相关文章
- mybatis之联表查询
今天碰到了一个问题,就是要在三张表里面各取一部分数据然后组成一个list传到前台页面显示.但是并不想在后台做太多判断,(因为涉及到for循环)会拉慢运行速度.正好用的框架是spring+springM ...
- Mybatis框架-联表查询显示问题解决
需求:查询结果要求显示用户名,用户密码,用户的角色 因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了. 这里需要在User实体类中添加 ...
- mybatis一对一联表查询的两种常见方式
1.一条语句执行查询(代码如下图) 注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_i ...
- MyBatis联表查询
MyBatis逆向工程主要用于单表操作,那么需要进行联表操作时,往往需要我们自己去写sql语句. 写sql语句之前,我们先修改一下实体类 Course.java: public class Cours ...
- mybatis 联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习存档(5)——联表查询
之前的数据库操作都是基于一张表进行操作的,若一次查询涉及到多张表,那该如何进行操作呢? 首先明确联表查询的几个关系,大体可以分为一对一和一对多这两种情况,接下来对这两种情况进行分析: 一.建立表.添加 ...
- MyBatis联表查询——别名方式
在使用MyBatis你想工程时,单表操作其实是非常完美的,涉及到多表联合查询时,需要我们自己写联表的SQL语句. 我拿出项目中的部分代码作为示例, EmployeeMapper.xml: <?x ...
- Mybatis入门(四)------联表查询
Mybatis联表查询 一.1对1查询 1.数据库建表 假设一个老师带一个学生 CREATE TABLE teacher( t_id INT PRIMARY KEY, t_name VARCHAR(3 ...
- Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)
目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...
随机推荐
- 《你不知道的javascript(上)》笔记
作用域是什么 编译原理 分词/词法分析 这个过程会将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为词法单元 解析/语法分析 词法单元流(数组)转换成一个由元素逐级嵌套所组成 ...
- ECMAScript基本语法——⑤运算符 逻辑运算符
&&与,会短路:左边为false右边就不参与运算||或,会短路:左边为true右边就不参与运算!非, 注意:在JavaScript中,如果运算数不是运算符要求的类型,那么JavaScr ...
- cmdb实现三种方式
为什么要做CMDB? 1.实现运维自动化,CMDB是实现运维自动化的基石 2.之前做资产统计的时候,使用execl来统计,为了年底资产审计方便 3.运维日常工作繁琐, 4.运行环境不统一 Agent方 ...
- 一步步教你如何在ubuntu虚拟机中安装QEMU并模拟arm 开发环境(二)rootfs制作
过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享, ...
- 洛谷 P3796 【模板】AC自动机(加强版)(AC自动机)
题目链接:https://www.luogu.com.cn/problem/P3796 AC自动机:复杂度$O( (N+M)\times L )$,N为模式串个数,L为平均长度,M为文章长度. ins ...
- python3练习100题——034
题目:练习函数调用. 这个很容易了. def hello_world(): return "hello, world!" def fun(): print(hello_world( ...
- layui树形结构更改
/* * 将json字符串更改为layui.tree所用的数据结构类型,输出仍然为json字符串 * tanghao 7.29 */ function dataToTreeData(oData_str ...
- axios的基本用法与并发请求
一.axios的基本用法 <router-link to="" class="a1" @click.native="logins"&g ...
- 基于alpine的php-fpm扩展swoole和pdo_mysql
vim Dockerfile 插入一下内容 FROM php:fpm-alpine RUN echo http://mirrors.aliyun.com/alpine/v3.10/main>/e ...
- Js 事件委托 解决动态元素不能click点击的问题
参考教程地址 https://blog.csdn.net/xiaolong20081/article/details/79792137 不想写了.直接看上面就行 采用事件委托或代理方式绑定 $(doc ...