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特性,在实现两表联合查询时通过别名完 ...
随机推荐
- APACHE + LDAP 的权限认证配置方法
原文地址:http://www.chinaunix.net/jh/49/627646.html 一.前言 很多朋友希望利用 Apache 通过 LDAP 进行用户认证及权限管理. 通过多次试验 ...
- multi-mechanize
1. 安装 万能的pip&easy_install(python27环境) pip install multi-mechanize mechanize numpy matplotlib mec ...
- js获取当前域名的方法
一.获取当前域名 1.方法一 var domain = document.domain; 2.方法二 var domain = window.location.host; 但是获取到的domain在线 ...
- 文本检测: CTPN
参考: https://zhuanlan.zhihu.com/p/37363942 https://zhuanlan.zhihu.com/p/34757009 https://zhuanlan.zhi ...
- 百度MIP(百度版的google AMP)了解一下?
官网:https://www.mipengine.org/ 视频教学:http://bit.baidu.com/subject/datalist/sid/10/cid/22.html github:h ...
- 温故而知新 forEach 无法中断(break)的问题
forEach无法使用break和return来中断,只能使用throw catch来达到中断的效果了. var id = (function(){ // forEach 是无法中断的.除非用这种ha ...
- MySQL EXPLAIN 命令详解
MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...
- 解决Eclipse无法打开“Failed to load the JNI shared library”
这是因为JDK配置错误所导致的现象. 一般说来,新购笔记本会预装64位的windows系统,而在网上下载软件时,32位会优先出现在页面中(现在来说是这个情况,但我认为未来64位会越来越普及). 如果你 ...
- MySql图解给表添加外键
关于外键约束的几种方式,请移步鄙人的另外一个博客中的博文 http://blog.csdn.net/hadues/article/details/52558184
- sql server 列修改null 变成not null
ALTER TABLE [table_name] ALTER COLUMN [column_name] [datetime] NOT NULL --datetime是列的类型