select :

  返回对象:

     <select  id = " "  resultType= "对象的全类名"  />

  List:

    <select  id = " "  resultType = "list泛型中的值" />

  Map:

    1.返回一条记录 Map<String,Object>

                 key -> 字段

              value -> 值

                                     <select id = " "  resultType="map" />

    2.返回多条记录 Map<Integer,Employee>

             key -> @MapKey("column")标注在接口方法上,表名哪个字段作为Key

               value -> 对象

             <select id = " " resultTyppe="对象的全类名" />

  ResultMap:

    一对一:

    1.级联属性 

     <resultMap id="myEmpAndDept" type="org.maple.pojo.Employee">
   <id column="id" property="id"/>
   <result column="last_name" property="name"/>
   <result column="email" property="email"/>
   <result column="gender" property="gender"/>
   <result column="did" property="dept.id"/>
   <result column="deptName" property="dept.deptName"/>
  </resultMap>

     <select id="getEmpAndDeptById" resultMap="myEmpAndDept">

     2.association

      <resultMap id="myEmpAndDept2" type="org.maple.pojo.Employee">
   <id column="id" property="id"/>
   <result column="last_name" property="name"/>
   <result column="email" property="email"/>
   <result column="gender" property="gender"/>
      <association property="dept" javaType="org.maple.pojo.Department">
   <id column="did" property="id"/>
   <result column="deptName" property="deptName"/>
      </association>
   </resultMap>

     3.association 分布查询  

     <association property="dept" select="org.maple.mapper.DepartmentMapper.getDeptById" column="d_id"/>

    一对多

      collection查询

        <!-- 要通过id查询部门信息和所有员工 -->
     <resultMap id="myDept" type="org.maple.pojo.Department">
      <id column="id" property="id"/>
      <result column="dept_name" property="deptName"/>
      <!--定义集合时,使用collection属性-->
      <collection property="emps" ofType="org.maple.pojo.Employee">
     <id column="eId" property="id"/>
      <result column="last_name" property="name"/>
     <result column="gender" property="gender"/>
     <result column="email" property="email"/>
      </collection>
    </resultMap>       collection分部查询
        <resultMap id="myDeptStep" type="org.maple.pojo.Department">
      <id column="id" property="id"/>
     <result column="dept_name" property="deptName"/>
     <collection property="emps" select="org.maple.mapper.EmployeeMapper.findEmpsById" column="id"></collection>
      </resultMap>

update,delete,insert:返回Integer,Long,Boolean,void

1.返回List

   返回集合类型,resultType中写集合中元素的类型

    /**
* 返回List集合
*/
List<Employee> getEmpsByNameLike(String name);
    <!--如果返回的是集合,resultType需要写集合中元素的类型-->
<select id="getEmpsByNameLike" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE last_name like concat('%',#{name},'%');
</select>
Employee{id=1, name='tom', gender=0, email='tom@atguigu.com'}
Employee{id=8, name='rose', gender=1, email='rose@qq.com'}
Employee{id=9, name='zhaozhihao', gender=1, email='chenquan@qq.com'}
Employee{id=12, name='nihao', gender=1, email='nihao@qq.com'}

2.返回Map

1.返回的一条记录的map

  key:字段名

  value:表中的名字

    /**
* 返回一条记录map,key就是列名,值就是表中的值
*/
Map<String,Object> getEmpByIdReturnMap(Integer id);
    <!--如果返回的是map,resultType需要写map,mybatis为常用类起了别名-->
<select id="getEmpByIdReturnMap" resultType="map">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE id = #{id}
</select>
{gender=0, name=tom, id=1, email=tom@atguigu.com}

2.返回多条记录的map

  Map<column,Employee>

  key:哪个字段作为key,使用@MapKey("column")

  value:封装对象

    /**
* 多条记录封装Map,Map<Integer,Employee>
* @MapKey 告诉mybaits使用哪个属性封装成map的key
*/
@MapKey("id")
Map<Integer,Employee> getEmpByNameLikeReturnMap(String name);
    <!--如果返回的是map,封装成emp,resultType需要写Employee-->
<select id="getEmpByNameLikeReturnMap" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE last_name like concat('%',#{name},'%');
</select>
{1=Employee{id=1, name='tom', gender=0, email='tom@atguigu.com'},
8=Employee{id=8, name='rose', gender=1, email='rose@qq.com'},
9=Employee{id=9, name='zhaozhihao', gender=1, email='chenquan@qq.com'},
12=Employee{id=12, name='nihao', gender=1, email='nihao@qq.com'}}

3.ResultMap

1.简单的使用

    /**
* 根据id查询员工
*/
Employee getEmpById(Integer id);
<mapper namespace="org.maple.mapper.EmployeeMapperPlus">

    <!--resultMap 自定义封装规则-->
<!--
id:唯一id,方便引用
type:自定义规则的java类型
-->
<resultMap id="MyEmp" type="org.maple.pojo.Employee">
<!--
id 主键的封装规则,底层会有优化
column 数据库中字段
property javaBean中的字段
-->
<id column="id" property="id"/>
<result column="last_name" property="name"/>
<!--其他不指定的列,如果名字一样,会自动封装。但是写resultMap建议都写上-->
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap> <!--简单的使用resultMap-->
<select id="getEmpById" resultMap="MyEmp">
SELECT id,last_name,email,gender
FROM tbl_employee
WHERE id = #{id}
</select> </mapper>

2.多表使用(一对一)

public class Employee {

    private Integer id;

    private String name;

    private Character gender;

    private String email;

    private Department dept;
}
public class Department {

    private Integer id;
private String deptName;
}

  2.1 第一种规则

  级联属性的方式

    /**
* 根据id查出员工和部门信息
*/
Employee getEmpAndDeptById(Integer id);
  <!--1.级联属性的方式-->
   <resultMap id="myEmpAndDept" type="org.maple.pojo.Employee">
<id column="id" property="id"/>
<result column="last_name" property="name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<result column="did" property="dept.id"/>
<result column="deptName" property="dept.deptName"/>
</resultMap> <select id="getEmpAndDeptById" resultMap="myEmpAndDept">
SELECT e.id,e.last_name,e.email,e.gender,d.id did,d.dept_name deptName
FROM tbl_employee e
INNER JOIN tbl_dept d
ON e.d_id = d.id
WHERE e.id = #{id}
</select>

  2.2 第二种规则(association定义对象

    association: property 是 Employee对象中的属性,javaType是指该属性属于哪个javaBean

    <!--2.使用association-->
<resultMap id="myEmpAndDept2" type="org.maple.pojo.Employee">
<id column="id" property="id"/>
<result column="last_name" property="name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<association property="dept" javaType="org.maple.pojo.Department">
<id column="did" property="id"/>
<result column="deptName" property="deptName"/>
</association>
</resultMap>

  2.3 第三种规则(分部查询,association

    假设之前部门的mapper中已经定义了通过部门id查找部门信息,那么我们就可以通过分部查询来查询出员工信息和部门信息

    /**
* 根据id查出员工和部门信息,分部查询
*/
Employee getEmpAndDeptByIdStep(Integer id);
    <!--使用association进行分布查询-->
<resultMap id="myEmpAndDeptStep" type="org.maple.pojo.Employee">
<id column="id" property="id" />
<result column="last_name" property="name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<!--property:Employee中的属性
select:调用DepartmentMapper中的查询方法 命名空间+方法
column:传给select 方法哪个参数
-->
<association property="dept" select="org.maple.mapper.DepartmentMapper.getDeptById" column="d_id"/>
</resultMap> <select id="getEmpAndDeptByIdStep" resultMap="myEmpAndDeptStep">
select id,last_name,gender,email,d_id from tbl_employee where id = #{id}
</select>

  分部查询的好处,可以实现懒加载:当只需要调用员工的信息时,第二条sql语句就不会发出,知道需要调用部门的信息,才会发sql语句

  通过在全局配置文件中添加:

     <settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

3.多表的使用(一对多)

public class Department {

    private Integer id;
private String deptName;
private List<Employee> emps;
}

1. 嵌套结果集的方式

    /**
* 根据id查询部门信息和所有员工
*/
Department getDeptAndEmpsById(Integer id);
    <!-- 要通过id查询部门信息和所有员工 -->
<resultMap id="myDept" type="org.maple.pojo.Department">
<id column="id" property="id"/>
<result column="dept_name" property="deptName"/>
<!--定义集合时,使用collection属性-->
<collection property="emps" ofType="org.maple.pojo.Employee">
<id column="eId" property="id"/>
<result column="last_name" property="name"/>
<result column="gender" property="gender"/>
<result column="email" property="email"/>
</collection>
</resultMap> <select id="getDeptAndEmpsById" resultMap="myDept">
SELECT d.id,d.dept_name,e.id eId,e.last_name,e.gender,e.email
FROM tbl_dept d
LEFT JOIN tbl_employee e
ON d.id = e.d_id
WHERE d.id = #{id}
</select>

2.分部查询的方式

    /**
* 根据id 分部查询出部门信息和所有员工
*/
Department getDeptAndEmpsByIdStep(Integer id);
    <!--分部查询-->
<resultMap id="myDeptStep" type="org.maple.pojo.Department">
<id column="id" property="id"/>
<result column="dept_name" property="deptName"/>
<collection property="emps" select="org.maple.mapper.EmployeeMapper.findEmpsById" column="id"></collection>
</resultMap> <select id="getDeptAndEmpsByIdStep" resultMap="myDeptStep">
SELECT id,dept_name
FROM tbl_dept
WHERE id = #{id}
</select>

    

<MyBatis>入门五 查询的返回值处理的更多相关文章

  1. MyBatis查询,返回值Map或List<Map>

    一.返回值Map 1.mapper.xml <select id="selectUserMapLimitOne" resultType="java.util.Has ...

  2. mybatis的增删改查返回值小析(六)

    本文验证了通过mybatis访问数据库时的,增删改查的返回值情况. 直接看代码. 1.service层 /** *@Author: Administrator on 2020/3/12 15:15 * ...

  3. 获取动态SQL查询语句返回值(sp_executesql)

    在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可. 而今天的一个存储过程却需要获取动态SQL的查询结果. 需求描述:在某表中根据Id值 ...

  4. MyBatis insert/delete/update 的返回值

    insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null. <insert id="inse ...

  5. mybatis调用存储过程获得取返回值

    总体思路:map传值 controller: Map<String,Object> m=new HashMap<String,Object>(); m.put("na ...

  6. C# lambda查询带返回值

    问题来源: <深入理解C#(第3版)> 11页 具体如下: var lists=new List<string>{"111","222" ...

  7. Python3入门系列之-----return返回值,我终于懂了

    前言 初学者学习return的用法有点蒙,不知道它的作用是什么?返回的是什么?在什么时候要用?小伙伴也可能会遇到和我同样的困扰,给大家举个例子,马上就明白了. 同一段代码,函数中带return和没有r ...

  8. MyBatis参数条件查询传入的值为0时的判断

    MyBatis条件查询对字段判断是否为空一般为: <if test="testValue!=null and testValue != ''"> and test_va ...

  9. spring+mybatis下delete和insert返回值-2147482646

    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"&g ...

随机推荐

  1. HDU 5753Permutation Bo

    Permutation Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  2. python utc时间转换为strftime

    拿来主义: from datetime import datetimefrom time import timetime_sec = time()def time2str(time_with_sec) ...

  3. codeforces 245H Queries for Number of Palindromes RK Hash + dp

    H. Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabyt ...

  4. RDA DEBUG

    DEBUG寄存器:word 0xa0000010 word 0xa0000010 1 //debug开 word 0xa0000010 0 //debug关 当然也可以按模块打开/关闭debug信息, ...

  5. 10.23NOIP模拟题

    叉叉题目描述现在有一个字符串,每个字母出现的次数均为偶数.接下来我们把第一次出现的字母 a 和第二次出现的 a 连一条线,第三次出现的和四次出现的字母 a 连一条线,第五次出现的和六次出现的字母 a ...

  6. svg image 图片无法铺满 circle 的问题解决

    引子 使用d3.js绘制了力布图后,需要在circle中绘制图片,方法如下: // 绘制图片 drawPattern(gContainer) { let that = this; let gPatte ...

  7. npm install 安装软件,出现 operation not permitted, mkdir 'C:\Program Files\nodejs\node_cache'

    问题如下图: 解决办法: 在开始菜单栏里打开cmd的时,右击选择“以管理员身份运行”.然后再在打开的cmd里运动install就没问题了. 这个问题应该是当时安装依赖时,我们是以管理员身份运行的:所以 ...

  8. MySql 同表复制数据 可以改变数据

    Mysql语法: INSERT INTO 表名 (字段) SELECT 字段 FROM 表名 WHERE 条件: 如果要修改其中某一个字段,在查询语句中:x(要改变的值) as 字段名. eg: IN ...

  9. jmeter生成时间的函数

    在一个接口测试中,需要提交的请求中要带时间,在看完jmeter帮忙文档,正好总结一下 1.需求 在一个http请求中请求数据要带有时间,如下: 2.实现 突然想到jmeter自带的函数助手好像是可以实 ...

  10. 使用Oracle的DBMS_SQL包执行动态SQL语句

    引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle ...