mybatis一对一嵌套查询
要求:查询一个员工的时候,把他对应的部门也查询出来
实现(其他配置这里不作说明,框架基于spring_springMVC_mybatis_oracle):
如有不对或不适的地方,请多多指教。
1、新建Emp实体类(get 和set方法省略)
package app.cmsg.entity;
import java.sql.Date;
public class Emp {
	private Integer f_empno;
	private String f_ename;
	private String f_ejob;
	private Integer f_emgr;
	private Date f_hiredate;
	private Double f_sal;
	private Double f_comm;
	private Integer f_deptno;
...
省略get和set方法
}
/**
	 * 关联属性,封装dept员工对应的部门信息
	 * @return
	 */
	private Dept dept;
2 、新建关联属性对应的部门实体类
package app.cmsg.entity;
public class Dept {
	private Integer f_deptno;
	private String f_dname;
	private String f_loc;
...
省略get和set方法
}
3 EmpDao中添加根据员工ID查询员工的方法
package app.cmsg.dao;
import java.util.List;
import app.cmsg.annotation.MyBatisRepostory;
import app.cmsg.entity.Condition;
import app.cmsg.entity.Emp;
/**
 * 创建EmpDao接口并增加查询全部员工的方法
 * @author 4750g
 * 员工表的Dao组件
 */
@MyBatisRepostory //<!--mybatis注解 app.cmsg.annotation.MyBatisRepostory需要自定义-->applicationContext.xml中配置的
public interface EmpDao {
	Emp findById(int f_empno);
}
4 配置mapper.xml文件
<select id="findById" parameterType="java.lang.Integer" resultMap="empMap">
		  select * from t_emp t where t.f_empno = #{id}
	</select>
	<resultMap type="app.cmsg.entity.Emp" id="empMap">
		  <association property="dept" column="f_deptno"  javaType="app.cmsg.entity.Dept" select="findByDeptApp">
		</association>
	</resultMap>
	<select id="findByDeptApp" parameterType="java.lang.Integer"  resultType="app.cmsg.entity.Dept">
		  select * from t_dept t where t.f_deptno = #{f_deptno}
	</select>
先是请求id为findById的select映射,然后得到一个id为empMap的ResultMap对象,在对应的resultMap的返回
	类型是一个app.cmsg.entity.Emp对象,其中只有一个association节点,其仍会把对应的id等属性赋给app.cmsg.entity.Emp对象,
	这就是MyBatis拥有自动封装功能,只要你提供了返回类型,MyBatis会根据自己的判断来利用查询结果封装对应的对象,MyBatis的自
	身判断是把查询的field或其对应的别名与返回对象的属性进行比较,如果相匹配且类型也相匹配,MyBatis则会对其进行赋值。在上面对应的
	resultMap中关联了一个dept属性,其对应的JAVA类型为Dept,在上述的写法中,关联对象是通过子查询来进行关联的,当然也可以直接
	通过关联查询来进行关联。上面的association子节点中,Property属性表示是resultMap返回类型的哪个关联属性,对于上面的例子
	就是Emp管理的dept属性;select表示进行哪个select映射来映射对应的关联属性,即会去请求id为select所对应的值的select映射 来
	查询出其所关联的属性对象;Column表示当前关联对象在id为empMap的resultMap中所对应的键值对,该键值对将作为对关联对象子查询的参数,
	即将把在findById中查询出来的dept属性的值作为参数传给进行关联对象dept的子查询findByDeptApp的参数;javaType表示当前关联
	对象在JAVA中是什么类型。
5 添加测试类(需要引入Junit包)
package app.cmsg.test;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import app.cmsg.dao.EmpDao;
import app.cmsg.entity.Condition;
import app.cmsg.entity.Emp;
public class JUintTest {
/**
	 * 多对一嵌套查询映射
	 * 根据ID查询一条员工记录,并查询他们所在的部门
	 */
	@Test
	public void findById(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao empDao = ctx.getBean(EmpDao.class);
		Emp emp = empDao.findById(12);
		System.out.println(
			  emp.getF_empno()+", "+
			  emp.getF_ename()+", "+
			  emp.getF_ejob()+", "+
			  emp.getDept().getF_deptno()+", "+
			  emp.getDept().getF_dname()+", "+
			  emp.getDept().getF_loc()
			
		);
最后控制台打印出的结果

mybatis一对一嵌套查询的更多相关文章
- Mybatis一对一关联查询
		有两张表,老师表teacher和班级表class,一个class班级对应一个teacher,一个teacher对应一个class 需求是根据班级id查询班级信息(带老师的信息) 创建teacher和c ... 
- mybatis的嵌套查询(嵌套查询nested select和嵌套结果nested results查询)区别
		(转自:http://blog.csdn.net/canot/article/details/51485955) Mybatis表现关联关系比hibernate简单,没有分那么细致one-to-man ... 
- mybatis的嵌套查询与嵌套结果查询的不同
		原文:https://blog.csdn.net/qq_39706071/article/details/85156840 实体类: 嵌套查询mapper方法:嵌套查询的弊端:即嵌套查询的N+1问题尽 ... 
- MyBatis学习(四)MyBatis一对一关联查询
		一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ... 
- mybatis一对一关联查询——(八)
		1.需求 查询所有订单信息,关联查询下单用户信息. 注意: 因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则为一对多查 ... 
- MyBatis 一对一关联查询
		xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC & ... 
- 五 Mybatis一对一关联查询的两种方式(基于resultType&基于resultMap)
		关联查询: 一个用户对应多个订单,一个订单只有一个用户 订单关联用户:两种方式 一:基于resultTYpe,一个与表关系一样的pojo实现 主表订单,从表用户 首先要有一个与关联查询表关系一样的po ... 
- MyBatis初级实战之五:一对一关联查询
		欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ... 
- Mybatis之关联查询
		一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ... 
随机推荐
- mkyaffs2image制作根文件系统、使用NFS挂载虚拟机目录(2)
			1.制作根文件系统及nfs烧写 1.1 先解压文件系统,/wok/nfs_root 目录下是已经构造好的各种文件系统:① fs_mini.tar.bz2 是最小的根文件系统,里面的设备节点是事先建立好 ... 
- 基于Vue全家桶制作的的高仿美团APP
			鸣谢:该项目核心部分参考了慕课网精英讲师ustbhuangyi的课程,其余部分高仿美团APP构建. 前端菜鸟项目,大佬们轻喷~ 美团外卖APP 
- Postman几种常用方式
			Postman几种常用方式 1.get请求直接拼URL形式 对于http接口,有get和post两种请求方式,当接口说明中未明确post中入参必须是json串时,均可用url方式请求 参数既可以写到U ... 
- 深度神经网络在量化交易里的应用 之二  -- 用深度网络(LSTM)预测5日收盘价格
			距离上一篇文章,正好两个星期. 这边文章9月15日 16:30 开始写. 可能几个小时后就写完了.用一句粗俗的话说, "当你怀孕的时候,别人都知道你怀孕了, 但不知道你被日了多少回 ... 
- idea 给maven项目添加依赖(二)
			这里接着上一篇来 我们观察目录发现有两个pom.xml(project object module) 项目是里面的,所以外面的先不管它. 点击里面的pom.xml 1.在<url>节点下面 ... 
- JS嵌套循环的典型练习题
			1.斐波那契数列 ①分数 <script type="text/javascript"> var a = 1 var b = 1 var c for ... 
- 【DDD】领域驱动设计实践 —— 业务建模实例(‘发布帖子’)
			本文是基于上一篇‘业务建模小招数’的实践,后面的多篇博文类似.本文主要讲解‘发表帖子’场景的业务建模,包括:业务建模.业务模型.示例代码:示例代码会使用java编写,文末附有github地址.相比于& ... 
- 201521123108 《Java程序设计》第7周学习总结
			1. 本周学习总结 2. 书面作业 Q1.ArrayList代码分析 Q1.1 解释ArrayList的contains源代码 答:源代码如下: public boolean contains(Obj ... 
- 201521123005 《Java程序设计》第1周学习总结
			1. 本章学习总结 了解JDK/JRE/JVM,学会了如何安装JDK 学会使用控制台和eclipse上运行java代码 了解PTA提交的常见套路 http://www.cnblogs.com/zhrb ... 
- 201521123020《java程序设计》 第11周学习总结
			1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ... 
