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. bzoj5311: 贞鱼

    还是年轻啊算的时候少乘一个4000被卡二分上界了...%%%%bright教我超级快速读D飞bzoj垃圾卡常数据 我们容易写出这样的DP方程:f[i][j]=f[k][j-1]+val(k+1,j) ...

  2. 【Dairy】2016.10.24 - made 嘲讽垃圾

    //这个还找不到我的博客,但在看到原文 //这个还找不到我的博客,但在看到原文 //这个还找不到我的博客,但在看到原文 //这个还在我前面,访问多 一波嘲讽,woc 今天百度一下文章,发现有一篇和我一 ...

  3. 基于Spark的GBDT + LR模型实现

    目录 基于Spark的GBDT + LR模型实现 数据预处理部分 GBDT模型部分(省略调参部分) GBDT与LR混合部分 基于Spark的GBDT + LR模型实现 测试数据来源http://arc ...

  4. 使用HttpClient MultipartEntityBuilder 上传文件,并解决中文文件名乱码问题

    遇到一种业务场景,前端上传的文件需要经过java服务转发至文件服务.期间遇到了原生HttpClient怎么使用的问题.怎么把MultipartFile怎么重新组装成Http请求发送出去的问题.文件中文 ...

  5. js数值型遇0开始自动转换为8进制

    如题,今天在项目更新时发现了js的这个自动转换问题,代码如下: var num = 0110; render:function(num){       var html="<a hre ...

  6. bzoj 1833: [ZJOI2010]count 数字计数【数位dp】

    非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r)-ans(l-1),用预处理出的f数组dp出f即可(可能也不是dp吧--) #include ...

  7. [Swift]关键字:Self、self与super

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. Linux学习笔记之Linux常用命令剖析-cat/chmod/cd

    1.cat:用于连接文件并打印到标准输出设备上.(使用权限:所有使用者) 语法格式:cat [-AbeEnstTuv] [--help] [--version] fileName 参数说明: -n 或 ...

  9. [C陷阱和缺陷] 第2章 语法“陷阱”

    第2章 语法陷阱 2.1 理解函数声明   当计算机启动时,硬件将调用首地址为0位置的子例程,为了模拟开机时的情形,必须设计出一个C语言,以显示调用该子例程,经过一段时间的思考,得出语句如下: ( * ...

  10. [BZOJ:3162]:独钓寒江雪

    题解: 求本质不同的独立集的个数 首先独立集的个数是很好做的 \(f[u][0/1]\)表示节点\(u\)不选/选的方案数 然后dp就是 \(f[u][0] = f[u][0] * (f[v][0] ...