mybatis总结(三)之多表查询
上一节,已经把实体类和配置文件都写过了,这节课直接添加几个方法吧
在DeptMapper.xml文件中添加
<!-- 多表查询(1对多) ,通过部门编号,查询出部门所在的员工姓名,部门名,部门编号 -->
<select id="selectByDeptno" resultMap="deptResult">
select
ename,dept.deptno,dname
from dept join emp
on dept.deptno=emp.deptno
where dept.deptno=#{deptno}
</select>
<!-- one 方 -->
<resultMap type="Dept" id="deptResult">
<!-- id指定主键的相关信息(列名、属性名) -->
<id property="deptno" column="deptno" />
<!-- result定义除了主键列之外的其他字段 -->
<result property="dname" column="dname" />
<collection property="emps" ofType="Emp" resultMap="empResult"
foreignColumn="deptno" />
</resultMap>
<!-- many方 -->
<resultMap id="empResult" type="Emp">
<id property="empno" column="empno" />
<result property="ename" column="ename" />
</resultMap> <!--一对一查询 -->
<!-- 通过员工编号,查询该员工姓名、所在部门名称 -->
<select id="selectByEmpno" resultMap="empResult1">
select
ename,dept.deptno,dname
from
emp join dept
on emp.deptno=dept.deptno
where emp.empno=#{empno}
</select>
<resultMap id="empResult1" type="Emp">
<id property="empno" column="empno" />
<result property="ename" column="ename" />
<association property="dept" javaType="Dept"
foreignColumn="deptno" resultMap="deptResult1"></association>
</resultMap>
<resultMap id="deptResult1" type="Dept">
<!-- id指定主键的相关信息(列名、属性名) -->
<id property="deptno" column="deptno" />
<!-- result定义除了主键列之外的其他字段 -->
<result property="dname" column="dname" />
</resultMap>
2. mapper接口
public interface DeptMapper {
public Dept selectByDeptno(int deptno);
public Emp selectByEmpno(int empno);
}
3.测试方法
public class DeptTest {
public static void main(String[] args) throws IOException {
// 指定mybatis配置文件路径和文件名
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
// session.selectOne(配置文件中namespace.id,传入参数的值)
//通过接口,调用方法(接口名和namespace名称保持一致,id和方法名保持一致)
DeptMapper mapper = session.getMapper(DeptMapper.class);
//一对多查询
Dept dept=mapper.selectByDeptno(10);
System.out.println(dept.getDeptno()+dept.getLoc()+dept.getDname());
List<Emp> list=dept.getEmps();
for (Emp emp : list) {
System.out.println(emp.getEname());
}
//一对一查询
Emp emp=mapper.selectByEmpno(7499);
System.out.println("部门编号:"+emp.getDept().getDeptno()+"部门名字:"+emp.getDept().getDname()+"员工名字:"+emp.getEname());
}
} finally {
session.close();
}
}
}
mybatis总结(三)之多表查询的更多相关文章
- mybatis进阶案例之多表查询
mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引
一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...
- Mybatis学习笔记之---多表查询(1)
Mybatis多表查询(1) (一)举例(用户和账户) 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) (二)步骤 1.建立两张表:用户表,账户表,让用户表和账户表之 ...
- Mybatis学习笔记之---多表查询(2)
Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...
- mybatis深入理解(八)-----关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- T-SQL查询语句(三):多表查询
SQL查询语句<三>:多表查询 (也叫连接查询,此处为基于两个表的连接查询)如果一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果称为表之间的连接.连接查询实际上是通过各个 ...
- MyBatis学习总结——实现关联表查询(转)
原文链接:孤傲苍狼 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关 ...
- sql学习笔记(三)—— 联表查询
上篇写了一些sql查询的知识,这篇接着写一下有关联表查询的知识. 既然是联表查询,那肯定得多个表啊,所以,我们先创建一个教师表,表名为 teacher,并且向表中插入数据. 准备工作: 创建表语句: ...
- mybatis学习 十二 多表查询
Mybatis 实现多表查询方式: (1)业务装配.对两个表编写单表查询语句,在业务(Service)把查询的两个结果进行关联. (2)使用Auto Mapping特性,在实现两表联合查询时通过别名完 ...
随机推荐
- gdb调试运行程序带参数(调用动态链接库),debug过程记录
library多线程file1.gdb (运行程序名称) 例如 gdb cbenchmark 2.设置运行参数 set args -c 1 -n 1 -F ./libaliww.so -l 1 3.如 ...
- iOS 全屏侧滑/UIScrollView/UISlider间滑动冲突
代码地址如下:http://www.demodashi.com/demo/13848.html 效果预览 一.前期准备 有一个支持全屏侧滑返回的视图控制器ViewController,ViewCont ...
- 【C++】排序算法小结
1.计数排序 如果给定上下界,并且区间不大的话,最适用. 比如对于英文字母数组进行排序. 时间复杂度O(n),空间复杂度O(n) void countSort(int A[], int n, int ...
- Python3.2官方文档翻译--输出格式化
第八章 标准库二 第二部分涵盖了很多更能满足专业开发者需求的高级模块.这些模块在小脚本中非常少出现. 8.1 输出格式化 Reprlib模块为大型的或深度嵌套的容器缩写显示提供了repr()函数的一个 ...
- 【Unity】开发WebGL内存概念具体解释和遇到的问题
自增加unity WebGL平台以来.Unity的开发团队就一直致力于优化WebGL的内存消耗. 我们已经在Unity使用手冊上有对于WebGL内存管理的详尽分析,甚至在Unite Europe 20 ...
- Shell36计
常用命令: date:查看日期 [root@centos-01 conf]# date 2018年 07月 12日 星期四 15:17:39 CST [root@centos-01 conf]# [r ...
- 有道翻译 / 百度翻译Api
比较推荐使用百度翻译api 不推荐有道翻译,比较水. http://ai.youdao.com/docs/doc-trans-api.s#p02 http://ai.youdao.com/docs/d ...
- 小程序 wx.request ajax示例
简单示例 https://developers.weixin.qq.com/miniprogram/dev/api/network-request.html wx.request({ method: ...
- python--迭代器的实现
#!/usr/local/python/bin/python3 """ 一个迭代器的例子 """ class exsample(object ...
- Android Studio 使用感受 错误解决
刚到公司不久,公司叫我用Android studio软件,曾经一直在用的是eclipse ADT.突然接触到的新名词让我有点适应只是来. 好吧,既然是公司要求,肯定有它的道理.就从网上下载了它的安装包 ...