ResultMap使用

news2024/9/29 15:32:52

要解决的问题:属性名和字段名不一致

1.1 查询为null问题

  1. 查看之前的数据库的字段名
    在这里插入图片描述

  2. Java中的实体类设计

    public class User { 
      private int id; //id 
      private String name; //姓名 
      private String password; //密码和数据库不一样! 
      //构造 
      //set/get 
      //toString() 
    }
    
  3. 接口

    //根据id查询用户 
    User selectUserById(int id);
    
  4. mapper映射文件

<select id="selectUserById" resultType="user"> 
	select * from user where id = #{id} 
</select>
  1. 测试

    @Test public void testSelectUserById() { 
      SqlSession session = MybatisUtils.getSession(); 
      //获取SqlSession连接 	
      UserMapper mapper = session.getMapper(UserMapper.class); 
      User user = mapper.selectUserById(1); 
      System.out.println(user); 
      session.close(); 
    }
    

结果:

  • User{id=1, name=‘狂神’, password=‘null’}
  • 查询出来发现 password 为空 . 说明出现了问题!

分析:

  • select * from user where id = #{id} 可以看做

    select id,name,pwd from user where id = #{id}

  • mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 由于找不到setPwd() , 所以password返回null ; 【自动映射】

1.2 解决方案

方案一:为列名指定别名 , 别名和java实体类的属性名一致 .

<select id="selectUserById" resultType="User"> 
  select id , name , pwd as password from user where id = #{id} 
</select>

方案二:使用结果集映射->ResultMap【推荐】

<resultMap id="UserMap" type="User"> 
  <!-- id为主键 --> 
  <id column="id" property="id"/> 
  <!-- column是数据库表的列名 , property是对应实体类的属性名 --> 
  <result column="name" property="name"/> 
  <result column="pwd" property="password"/> 
</resultMap> 

<select id="selectUserById" resultMap="UserMap"> 
  select id , name , pwd from user where id = #{id} 
</select>

1.3 ResultMap

1.3.1 自动映射
  • resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC

    ResultSets 数据提取代码中解放出来。

  • 实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同

    等功能的长达数千行的代码。

  • ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。

你已经见过简单映射语句的示例了,但并没有显式指定 resultMap 。比如:

<select id="selectUserById" resultType="map"> 
  select id , name , pwd from user where id = #{id} 
</select>

上述语句只是简单地将所有的列映射到 HashMap 的键上,这由 resultType 属性指定。虽然在

大部分情况下都够用,但是 HashMap 不是一个很好的模型。你的程序更可能会使用 JavaBean 或

POJO(Plain Old Java Objects,普通老式 Java 对象)作为模型。

ResultMap 最优秀的地方在于,虽然你已经对它相当了解了,但是根本就不需要显式地用到他们。

1.3.2 手动映射
  1. 返回值类型为resultMap

    <select id="selectUserById" resultMap="UserMap"> 
      select id , name , pwd from user where id = #{id} 
    </select>
    
  2. 编写resultMap,实现手动映射!

<resultMap id="UserMap" type="User"> 
  <!-- id为主键 --> 
  <id column="id" property="id"/> 
  <!-- column是数据库表的列名 , property是对应实体类的属性名 --> 
  <result column="name" property="name"/> 
  <result column="pwd" property="password"/> 
</resultMap>

如果世界总是这么简单就好了。但是肯定不是的,数据库中,存在一对多,多对一的情况,我们之后会使用到一些高级的结果集映射,association,collection这些,我们将在之后讲解,今天你们需要把这些知识都消化掉才是最重要的!理解结果集映射的这个概念!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

容器(第六篇)docker-harbor

什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。 Harbor以 Docker 公司开源的 Registry 为基础&#xff0c;提供了图形管理 UI 、基于角色的访问控制(Role Based AccessContr…

常用的decap MOS电容版图介绍

常用的两种decap版图如下&#xff1a; 图a 图b 很多人认为decap电容就是source drain 衬底接地做下极板&#xff0c;poly gate接电源做上极板&#xff0c;这种认同是错误的。 我们先把MOS电容拆分成pmos和nmos去看。对于图a&#xff0c;poly没有接任何东西&#xff0c;pmos部…

数据库事务隔离级别

数据库事务隔离级别&#xff1a; 不同隔离级别引发的问题&#xff1a;对于同时运行的多个事务&#xff08;多线程并发&#xff09;, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题: &#xff08;问题的本质就是线程安全问题&#x…

2核4G云服务器可以支持多少个网站数量?多维度权衡

2核4G服务器可以安装多少个网站&#xff1f;阿腾云2核4G5M带宽服务器目前安装了14个网站&#xff0c;从技术角度是没有限制的&#xff0c;只要云服务器性能够用&#xff0c;想安装几个网站就安装几个网站&#xff0c;但是从公网带宽和CPU计算性能方面考虑&#xff0c;要计算网站…

6.10 线程池及gdb调试多线程

线程池概念和使用 概念&#xff1a; 通俗的讲就是一个线程的池子&#xff0c;可以循环的完成任务的一组线程集合 必要性&#xff1a; 我们平时创建一个线程&#xff0c;完成某一个任务&#xff0c;等待线程的退出。但当需要创建大量的线程时&#xff0c;假设T1为创建线程时间&…

DAY 74 ELK企业级日志分析系统

ELK 简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求 ELK各组件介绍 ElasticSearch&#xff1a; 是基于Lucene&#xff08;一个全文检索引…

大麦一键生成订单截图 大麦生成购票链接

一键生成订单截图&#xff0c;生成购票链接 已对接支付 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

idea设置@Author文件头注释

背景&#xff1a;做项目开发&#xff0c;每个文件的文件头现在看着特别难受&#xff0c;想着弄着统一一些吧 第一步&#xff1a;选择intelliJ IDEA&#xff0c;然后选择settings 第二步&#xff1a;选择Editor,再选择File and Code Templates 第三步&#xff1a;选择Includes,…

API管理的正确姿势--API Gateway

淘宝API管理的正确姿势--API Gateway 编者按&#xff1a; 数字化生态&#xff0c;以创新客户体验为核心&#xff0c;所有我们身边能感知到的变化都来自于渐近的创新。这些创新需要试错&#xff0c;需要不断的升级&#xff0c;并且创新往往与我们熟知的功能分离开来分别呈现。微…

企业级信息系统开发讲课笔记4.9 Thymeleaf模板引擎

文章目录 零、学习目标一、Spring Boot支持的视图技术二、Thymeleaf基本语法1、Thymeleaf常用标签2、Thymeleaf主要语法3、Thymeleaf内置对象4、Thymeleaf模板基本配置 三、Spring Boot整合Thymeleaf1、创建Spring Boot项目ThymeleafDemo2、在全局配置文件里配置Thymeleaf属性3…

简化本地Feign调用,老手教你这么玩

原创&#xff1a;微信公众号 码农参上&#xff0c;欢迎分享&#xff0c;转载请在文章头部保留出处&#xff0c;侵权必究 哈喽大家好啊&#xff0c;我是Hydra。 在平常的工作中&#xff0c;OpenFeign作为微服务间的调用组件使用的非常普遍&#xff0c;接口配合注解的调用方式突…

ChatGPT涉及的法律风险综述

ChatGPT&#xff08;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI研发的聊天机器人程序&#xff0c;于2022年11月30日发布。从发布的那一刻至今&#xff0c;ChatGPT一直受到各界的广泛关注。作为人工智能技术驱动的自然语言处理工具&#xff0c;它…

一种简单的文本监督语义分割框架

文章目录 A Simple Framework for Text-Supervised Semantic Segmentation摘要本文方法动机Locality-Driven Alignment&#xff08;LoDA&#xff09;SimSeg Framework 实验结果 A Simple Framework for Text-Supervised Semantic Segmentation 摘要 文本监督语义分割是一个新…

音频转文字工具都有哪些?分享三款好用的录音转文字软件

对于许多人来说&#xff0c;录音已经成为了记录重要信息的常用方法。但是&#xff0c;在实际应用中&#xff0c;往往会遇到如何将这些录音内容转换为文字记录的挑战。这是一个备受关注的问题。那么&#xff0c;录音如何转为文字呢&#xff1f;这篇文章就来给你推荐几个非常好用…

yolov5 的 mAP 和 召回率很低,但是精准率 AP还可以

可能的原因&#xff1a; 标注问题&#xff0c; 检查图片没有txt&#xff0c;导致有正样本的图片&#xff0c;被认为是背景&#xff0c;召回率降低。是否是中文路径, opencv这个cv2.imread不能读取中文图像。 改成这样就行。

预约按摩系统平台开发,常见问题解答

预约按摩平台系统常见问题&#xff1a; 预约流程&#xff1a;按摩系统提供简单易用的预约流程&#xff0c;用户只需要提供必要的信息即可完成预约&#xff0c;同时也可以随时修改或取消预约。 付款方式&#xff1a;按摩系统支持线上和线下支付方式&#xff0c;其中线上支付采用…

使用python-docx在文档中插入图片

在文档中添加图片的方法如下&#xff1a; from docx import Document from docx.shared import Inches, Cmdocument Document() document.add_heading(大标题, 0)# 新建word文档 p document.add_paragraph("下面插入图片&#xff1a;")document.add_picture(test_…

电力监控系统在电力系统中的应用

安科瑞虞佳豪 一年一度高考和中考即将来临&#xff0c;日前&#xff0c;国网咸丰县供电公司积极有序开展保电工作&#xff0c;全面进入“高考保供电”模式。 为全力保障高考期间供电安全&#xff0c;国网咸丰县供电公司将大水线供电线路采取分流运输方式&#xff0c;将除春晖…

IDEA之Mybatis Log Plugin的使用

Mybatis Log Plugin是一个用于记录Mybatis SQL语句执行情况的插件&#xff0c;帮助开发人员方便地追踪和分析Mybatis执行的SQL语句&#xff0c;从而更容易地找出程序中存在的问题和优化SQL语句的性能。 Mybatis Log Plugin可以以日志的形式记录Mybatis执行的SQL语句、执行时间…

win批量取消快速访问固定

win批量取消快速访问固定