MyBatis-Select查询

# MyBatis-Select

# select

1. public List<Employee> getEmpsByLastNameLike(String lastName);

//返回一条记录的map:key就是列名;值就是对应的值
2. public Map<String, Object> getEmpByIdReturnMap(Integer id);

@MapKey("id")
3. public Map<Integer, Employee> getEmpMapByLastNameLikeReturnMap(String lastName);

4. public Employee getEmpBydId(Integer id);

5. public Employee getEmpAndDept(Integer id);

6. 分步查询
	public Employee getEmpByIdStep(Integer id);
	public Department getDeptById(Integer id);

7. 高级分步
	public List<Employee> getEmpsByDeptId(Integer deptId);
	public Department getDeptByIdStep(Integer id);
<!-- public List<Employee> getEmpsByLastNameLike(String lastName); -->
<!-- resultType:如果返回的是一个集合,要写集合中元素的类型 -->
1.	<select id="getEmpsByLastNameLike" resultType="com.finen.mybatis.bean.Employee">
		select * from tbl_employee where last_name like #{lastName}
	</select>
	
	<!-- public Map<String, Object> getEmpByIdReturnMap(Integer id); -->
2.	<select id="getEmpByIdReturnMap" resultType="map">
		select * from tbl_employee where id=#{id}
	</select>
	
	<!-- public Map<Integer, Employee> getEmpMapByLastNameLikeReturnMap(String lastName); -->
3.	<select id="getEmpMapByLastNameLikeReturnMap" resultType="com.finen.mybatis.bean.Employee">
		select * from tbl_employee where last_name like #{lastName}
	</select>

4.<!-- 自定义某个javaBean的封装规则
		type:自定义规则的Java类型
		id:唯一id,方便引用
	 -->
	<resultMap type="com.finen.mybatis.bean.Employee" id="MyEmp">
		<!--指定主键列的封装规则
		id:定义主键有底层优化
		column:指定那一列
		property:指定对应的javaBean属性
		 -->
		<id column="id" property="id"/>
		<result column="last_name" property="lastName"/>
		<!-- 其他不指定的列会自动封装;我们只要写resultMap就把全部的映射规则都写上-->
		<result column="email" property="email"/>
		<result column="gender" property="gender"/>
	</resultMap>
	<!-- 
		resultMap:可以指定自定义结果集映射规则
		resultType:必须已经存在
	 -->
	<!-- public Employee getEmpBydId(Integer id); -->
	<select id="getEmpBydId"  resultMap="MyEmp">
		select * from tbl_employee where id=#{id}
	</select>

5.	<!--
	场景一:
		查询Employee的同时要查询员工对应的部门
		Employee ===>Department
		 一个员工有与之对应的部门信息
	 -->
	 <!-- public Employee getEmpAndDept(Integer id); -->
	 <!--
	 	联合查询:级联属性封装结果集 
	  -->
	  
	 <resultMap type="com.finen.mybatis.bean.Employee" id="MyDifEmp">
		<id column="id" property="id"/>
		<result column="last_name" property="lastName"/>
		<result column="gender" property="gender"/>
		<result column="did" property="dept.id"/>
		<result column="dept_name" property="dept.departmentName"/>
	</resultMap>
	 
	 <resultMap type="com.finen.mybatis.bean.Employee" id="MyEmp2">
	 	<id column="id" property="id"/>
	 	<result column="last_name" property="lastName"/>
	 	<result column="gender" property="gender"/>
	 	<!-- 可以指定联合的对象
	 			property:指定那个属性是联合的对象
	 			javaType:指定这个属性对象的类型【不能省略】
	 	 -->
	 	
	 	<association property="dept" javaType="com.finen.mybatis.bean.Department">
	 		<id column="did" property="id"/>
	 		<result column="dept_name" property="departmentName"/>
	 	</association>
	 </resultMap>
	 
	 <select id="getEmpAndDept" resultMap="MyEmp2">
		SELECT e.id id,e.last_name last_name,e.gender gender,e.d_id d_id,
		d.id did,d.dept_name dept_name FROM tbl_employee e,tbl_dept d
		WHERE e.d_id=d.id AND e.id=#{id}
	</select>

6. 分步查询
	<!-- public Employee getEmpByIdStep(Integer id); -->
	 <!--
	 	使用association进行分步查询
	 	1.先根据员工id查询员工信息
	 	2.根据查询员工信息的中d_id值去查询部门信息
	 	3.部门设置到员工中
	  -->
	 <resultMap type="com.finen.mybatis.bean.Employee" id="MyEmpByStep">
	 	<id column="id" property="id"/>
	 	<result column="last_name" property="lastName"/>
	 	<result column="email" property="email"/>
	 	<result column="gender" property="gender"/>
	 	<!-- 定义关联对象的封装规则
	 			select: 表名当前属性是调用select指定的方法查出的结果
	 			column:指定将那一列的传给这个方法
	 			
	 			流程:使用select指定的方法(传入column指定的参数的值查出对象),并封装给property指定的属性
	 	 -->
	 	<association property="dept" 
	 	select="com.finen.mybatis.dao.DepartmentMapper.getDeptById"
	 	column="d_id">
	 	</association>
	 </resultMap>
	 
	 <select id="getEmpByIdStep" resultMap="MyEmpByStep">
	 	select * from tbl_employee where id=#{id}
	 </select>

	<!-- public Department getDeptById(Integer id); -->
	<select id="getDeptById" resultType="com.finen.mybatis.bean.Department">
		select id, dept_name departmentName from tbl_dept where id=#{id}
	</select>

7. 高级分步
	<!-- 方法1:嵌套结果集的方式 -->
	<!--
		collection: 嵌套结果集的方式 ,定义关联的集合类型相关规则
	 -->
	<!-- public Department getDeptByIdPlus(Integer id); -->
	<resultMap type="com.finen.mybatis.bean.Department" id="MyDept">
		<id column="did" property="id"/>
		<result column="dept_name" property="departmentName"/>
		<!-- collection定义集合类型的封装规则
			 ofType:指定集合里面的元素类型
		 -->
		<collection property="emps" ofType="com.finen.mybatis.bean.Employee">
			<id column="eid" property="id"/>
			<result column="last_name" property="lastName"/>
			<result column="email" property="email"/>
			<result column="gender" property="gender"/>
		</collection>
	</resultMap>
	<select id="getDeptByIdPlus" resultMap="MyDept">
		SELECT d.id did,d.dept_name dept_name,
				e.id eid,e.last_name last_name,e.email email,e.gender gender
		FROM tbl_dept d
		LEFT JOIN tbl_employee e
		ON d.id=e.d_id
		WHERE d.id=#{id}
	</select>

	<!-- 方法二:分步查询 -->
	<!--
		可以使用 延迟加载
		Employee ==> Dept
			每次查询Employee对象的时候,都将一起查询出来
			部门信息在我们使用的时候再去查询;
			分段查询的基础之上加上两个配置
	 -->
	<!-- ===================association======================= -->
	<!--
		场景二:
			查询部门的时候将部门对应的所有员工信息也查询出来
	 -->
	
	<!-- public List<Employee> getEmpsByDeptId(Integer deptId); -->
	<select id="getEmpsByDeptId" resultType="com.finen.mybatis.bean.Employee">
		select * from tbl_employee where d_id=#{deptId}
	</select>

	<!-- 方法2:分步查询 -->
	<!-- public Department getDeptByIdStep(Integer id); -->
	<resultMap type="com.finen.mybatis.bean.Department" id="MyDeptStep">
		<id column="id" property="id"/>
		<result column="dept_name" property="departmentName"/>
		<collection property="emps" 
			select="com.finen.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId"
			column="id">
			</collection>
	</resultMap>
	
	<select id="getDeptByIdStep" resultMap="MyDeptStep">
		select id, dept_name departmentName from tbl_dept where id=#{id} 
	</select>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • select 高级查询之子查询

      在 SQL 语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块。当获得一个查询的答案需要多个步骤的操作,首先必须创建一个查询来确定用户不知...

    Demo_Null
  • select 查询基础

      如果不查询表中所有的列,尽量避免使用 SELECT *,因为它会进行全表扫描,不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间的网络 ...

    Demo_Null
  • select 进阶查询

     ① 分组查询中,select 后面只能出现,在 group by 后出现过的列或者聚合函数。  ② where 是在分组前对记录进行筛选,而 having ...

    Demo_Null
  • select 高级查询之连接查询

      笛卡尔乘积是指在数学中,两个集合 X 和 Y 的笛卡尔积(Cartesian product),又称直积,表示为 X×Y,第一个对象是 X 的成员而第二个对...

    Demo_Null
  • SQL 基础-->SELECT 查询

    在SQL 开发工具,SQL 语句能选择分号结束(;) .当你运行多个SQL 语句的时候,需要分号

    Leshami
  • MyBatis实战(三)-二级缓存原理解

    MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能

    JavaEdge
  • mybatis笔记整理mybatis的基本用法及配置:

    贪挽懒月
  • 《深入理解mybatis原理》 MyBatis的二级缓存的设计原理

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://louluan.blog.c...

    亦山
  • mybatis 查询 orderby

    https://blog.csdn.net/xiaofanren1111/article/details/79470930 https://www.cnblo...

    平凡的学生族
  • 教你如何写出高性能的Mybatis分页插件

    最近做的一个需求需要写复杂的SQL,且需要分页,我是非常懒的人,因为项目中使用了mybatis-plus,因此分页想着使用mybatis-plus的分页插件自动...

    Java艺术
  • SSM第六讲 MyBatis的高级特性

    通过前面的学习,我们已经掌握了 Mybatis 中一对一,一对多,多对多关系的配置及实现,可以实现对象的关联查询。实际开发过程中有时候我们并不需要在加载用户信息...

    易兮科技
  • MyBatis:缓存,延迟加载,注解应用

    实际开发过程中很多时候并不需要总是在加载用户信息时就一定要加载他的订单信息。此时就是我们所说的延迟加载。

    RendaZhang
  • 小书MybatisPlus第3篇-自定义SQL

    书接上回,虽然Mybatis Plus帮我们提供了大量的默认方法,但我们为了实现多表关联查询,或者根据不同的查询条件传参,实现不同的动态SQL。在这种情况下我们...

    字母哥博客
  • MyBatis -- 必知必会

    MyBatis的前身是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google ...

    宋先生
  • Mybatis系列第12篇:掌握缓存为查询提速!

    Mybatis系列目标:从入门开始开始掌握一个高级开发所需要的Mybatis技能。

    路人甲Java
  • 听说你还不会Mybatis?

    下载网址:https://github.com/mybatis/mybatis-3/

    XiaoLin_Java
  • Java高频面试题- 每日三连问?【Day5】 — MyBatis篇2

    在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。

    浩说编程
  • MyBatis:复杂映射,配置深入

    使用 #{arg0}-#{argn} 或者 #{param1}-#{paramn} 获取参数

    RendaZhang
  • 长篇预警:MyBatis入门到入土

    ​ 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种认为,框架是可被应用开发者定制的应用骨架、模板。 ...

    XiaoLin_Java

扫码关注云+社区

领取腾讯云代金券