广告
返回顶部
首页 > 资讯 > 后端开发 > Python >MyBatis resultMap id标签的错误使用方式
  • 412
分享到

MyBatis resultMap id标签的错误使用方式

2024-04-02 19:04:59 412人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录mybatis resultMap id标签的错误使用本节的问题主要是我对mybatis id标签的错误使用resultMap标签的使用规则自定义结果映射规则associatio

MyBatis resultMap id标签的错误使用

我们在编写VO对象,如果业务场景稍微复杂一点,就会用到集合属性。例如用户查看个人订单列表,每个订单又包含多种或者多个规格的商品。

本节的问题主要是我对mybatis id标签的错误使用

id是resultMap以及Collection的子标签,标记出作为 ID 的结果可以帮助提高整体性能。特别注意的是,id是当前命名空间中的一个唯一标识,用于标识一个结果映射。

如下图,itemId(商品id)字段值在数据库中不唯一,错误使用会导致只返回该订单某商品的一条记录。因为对于某个商品,麻辣味和五香味只是商品规格,其商品id是相同的。

在这里插入图片描述

在这里插入图片描述

改用普通result标签后,返回正确结果。

在这里插入图片描述

在这里插入图片描述

EOF

resultMap标签的使用规则

自定义结果映射规则

<!-- resultMap自定义某个javabean的封装规则
       type:自定义规则的java类型
       id:唯一id方便引用
     -->
    <resultMap type="entity.Employee" id="getEmpByIdMap">
       <!-- id指定主键列的封装规则
           column:指定哪一列
           property:指定对应的javabean属性
        -->
       <id column="id" property="id"/>
       <!-- result定义普通列封装规则,若属性名与数据库对应表的列名相同可不写,
            mybatis会自动封装,但建议将所有的映射规则都写上
       -->
       <result column="name" property="name"/>
       <result column="sex" property="sex"/>
       <result column="email" property="email"/>
    </resultMap>
    <!-- public Employee getEmpById(Integer id) -->
    <select id="getEmpById" resultMap="getEmpByIdMap">
       select * from employee where id=#{id}
    </select>

association联合查询

  • association可以指定联合的javabean对象
  • property="dept":指定哪个属性是联合对象
  • javaType:指定这个属性的类型
<resultMap type="entity.Employee" id="getEmpAndDeptMap">
       <id column="id" property="id"/>
       <result column="empName" property="name"/>
       <result column="sex" property="sex"/>
       <result column="email" property="email"/>
       <!-- association可以指定联合的javabean对象
            property="dept":指定哪个属性是联合对象
            javaType:指定这个属性的类型-->
       <association property="dept" javaType="entity.Department">
           <id column="did" property="id"/>
           <result column="deptName" property="departmentName"/>
       </association>
    </resultMap>
    <!-- public Employee getEmpAndDept(Integer id) -->
    <select id="getEmpAndDept" resultMap="getEmpAndDeptMap">
       select e.id id,e.name empName,e.email email,e.sex sex,e.d_id d_id,
           d.id did,d.name deptName from employee e,dept d
           where e.d_id=d.id and e.id=#{id}
    </select>

使用association进行分布查询

 1、先按照员工id查询员工信息将会调用查询员工的sql

2、根据查询员工信息中的d_id值去部门表中查出部门信息

3、部门设置到员工中

        

<resultMap type="entity.Employee" id="getEmpAndDeptStepMap">
       <id column="id" property="id"/>
       <result column="name" property="name"/>
       <result column="sex" property="sex"/>
       <result column="email" property="email"/>
       <!-- association定义关联对象的封装规则
            select:表明当前属性是调用select指定的方法查出的结果
            column:指定将那一列的值作为参数传给这个方法
             流程:使用select指定的方法(传入column指定的这列参数的值)查出对象,
             并封装给property指定的属性
            -->
            <!-- discriminator鉴别器
                 column:指定判定的列名
                 javaType:列值对应的java类型
             -->
       <discriminator javaType="string" column="sex">
           <!-- resultType不能缺少 -->
           <case value="男" resultType="entity.Employee">
              <association property="dept" select="dao.DepartmentMapper.getDeptById"
                  column="d_id">
              </association>
           </case>
       </discriminator>
    </resultMap>
    <!-- public Employee getEmpByIdStep(Integer id) -->
    <select id="getEmpByIdStep" resultMap="getEmpAndDeptStepMap">
       select * from employee where id=#{id}
    </select>

嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则

<resultMap type="entity.Department" id="getDeptByIdPlusMap">
       <id column="did" property="id"/>
       <result column="deptName" property="departmentName"/>
       <!-- collection定义关联集合类型的属性的封装规则
            ofType:指定集合里面元素的类型             
        -->
       <collection property="emps" ofType="entity.Employee">
           <!-- 定义这个集合中元素的封装规则 -->
           <id column="eid" property="id"/>
           <result column="empName" property="name"/>
           <result column="sex" property="sex"/>
           <result column="email" property="email"/>
       </collection>
    </resultMap>
    <!-- public Department getDeptByIdPlus(Integer id) -->
    <select id="getDeptByIdPlus" resultMap="getDeptByIdPlusMap">
       select d.id did,d.name deptName,e.id eid,
           e.name empName,e.sex,e.email
           from dept d left join employee e
           on d.id=e.d_id
           where d.id=#{id}
    </select>

collection分步查询

<resultMap type="entity.Department" id="getDeptByIdStepMap">
       <id column="id" property="id"/>
       <result column="name" property="departmentName"/>
       <collection property="emps" select="dao.EmployeeMapperPlus.getEmpsByDeptId"
           column="{id}">
      <!-- 或则 column="{deptId=id}"-->
       </collection>
    </resultMap>
   <!-- public List<Employee> getEmpsByDeptId(Integer deptId -->
   <select id="getEmpsByDeptId" resultType="entity.Employee">
       select * from employee where d_id=#{deptId}
    </select>
    <!-- public Department getDeptByIdStep(Integer id) -->
    <select id="getDeptByIdStep" resultMap="getDeptByIdStepMap">
       select * from dept where id=#{id}
    </select>

当分布查询需要传递多个多个值时,将多个值封装map传递

colum=“{key1=column1,key2=colum2...}”

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: MyBatis resultMap id标签的错误使用方式

本文链接: https://www.lsjlt.com/news/163103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MyBatis resultMap id标签的错误使用方式
    目录MyBatis resultMap id标签的错误使用本节的问题主要是我对mybatis id标签的错误使用resultMap标签的使用规则自定义结果映射规则associatio...
    99+
    2022-11-13
  • Mybatis中resultMap标签和sql标签的设置方式
    目录resultMap标签和sql标签的设置1、项目目录2、数据库中的表的信息3、配置文件的信息4、User类5、IUserDao接口6、MybatisTest7、运行结果resul...
    99+
    2022-11-12
  • Mybatis resultMap标签继承、复用、嵌套方式
    目录resultMap标签继承、复用、嵌套定义表与实体类表实体类定义与表映射的 resultMap继承、复用、嵌套使用resultMap需要注意的地方resultMap标签继承、复用...
    99+
    2022-11-13
  • Mybatis resultMap标签继承、复用、嵌套的方法
    本篇内容主要讲解“Mybatis resultMap标签继承、复用、嵌套的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis resultMap标签继承、复用、...
    99+
    2023-06-29
  • Java Mybatis使用resultMap时,属性赋值顺序错误的巨坑
    目录Mybatis使用resultMap属性赋值顺序错误ids是后加入的字段 resultMap中是这样写的解决办法Mybatis使用resultMap时需注意Mybati...
    99+
    2022-11-13
  • Trim标签在Mybatis中的使用方法
    Trim标签在Mybatis中的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体代码如下所示:<update id="updateAu...
    99+
    2023-05-31
    mybatis trim
  • HTML5中audio标签的使用方式
    本篇内容主要讲解“HTML5中audio标签的使用方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中audio标签的使用方式”吧!在HTML5标准网...
    99+
    2022-10-19
  • python include标签的使用方式及说明
    目录include标签如何使用?include标签的使用截图如下总结include标签如何使用? include标签的使用 在讲python include标签使用之前,我们新建一个...
    99+
    2023-03-02
    python include标签 include标签的使用 python include
  • HTML中a标签的使用方法及跳转方式
    1、a标签的跳转方式和使用方法 a元素最重要的属性是 href 属性,它指示链接的目标。 a标签的跳转方式有五种: 写法为 1 _blank表示跳到新页面打开,打开一个新窗口 _self表示当前页面打开链接 _p...
    99+
    2023-09-20
    java Powered by 金山文档
  • 电脑的错误使用方式有哪些
    本文小编为大家详细介绍“电脑的错误使用方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“电脑的错误使用方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。开着电脑时,把主机(笔记本)搬来搬去电脑在运行...
    99+
    2023-06-28
  • Mybatis 中Mapper使用package方式配置报错的解决方案
    踩了个坑,写出来 Mybatis 中Mapper使用package方式配置报错 org.apache.ibatis.binding.BindingException: Invali...
    99+
    2022-11-12
  • HTML中a标签的使用方法及跳转方式有哪些
    这篇文章主要介绍“HTML中a标签的使用方法及跳转方式有哪些”,在日常操作中,相信很多人在HTML中a标签的使用方法及跳转方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式
    目录Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据1、创建Controller2、创建对应的jsp页面注意事项:springMVC的forEac...
    99+
    2022-11-12
  • 怎么使用正则替换的方式实现清除字符串中所有的HTML标签
    这篇文章将为大家详细讲解有关怎么使用正则替换的方式实现清除字符串中所有的HTML标签,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何编写一个函数,使用正则替换的方式能够实现清除字符串中所有的HTML标签...
    99+
    2023-06-15
  • 你知道吗?在ASP和JavaScript中,函数和数组有哪些常见的错误使用方式?
    函数和数组是编程中常用的数据类型,但是在ASP和JavaScript中,由于一些常见的错误使用方式,可能会导致代码出现错误或者程序崩溃。本文将会介绍一些常见的错误使用方式,并且提供演示代码以便读者更好地理解和学习。 一、ASP中函数的错误使...
    99+
    2023-11-13
    javascript 函数 数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作