当前位置: 首页 > news >正文

5.3 Mybatis映射文件 - 零基础入门,轻松学会查询的select标签和resultMap标签

CSDN成就一亿技术人


本文目录

  • 前言
  • 一、创建XML映射文件
  • 二、MybatisX插件安装
  • 三、mapper标签
  • 四、select标签
    • UserMapper接口方法
    • UserMapper.xml
  • 五、resultMap标签
    • 定义resultMap标签
    • 修改select标签
  • 总结


前言

MyBatis的强大在于它的语句映射,它提供了注解和XML映射文件两种开发方式,都是为了减少我们的使用成本,屏蔽JDBC代码细节,节省代码,从而让我们更专注于SQL代码!

通过 《上文》,我们学会了常用12种注解开发,本文主要讲解XML映射文件方式开发,轻松学会创建XML映射文件和常用的select标签resultMap标签的用法。


一、创建XML映射文件

XML映射文件的目录位置通常推荐创建在resources下,例如实战案例创建如下:

tg-book-dalresources下创建与UserMapper.java对应的Xml映射文件UserMapper.xml,如下图:

在这里插入图片描述

要求:路径相同,名称相同。

不同行不行?可以通过mybatis.mapper-locations配置!建议保持默认相同!

UserMapper.xml的内容定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.tg.book.dal.mapper.UserMapper"></mapper>

二、MybatisX插件安装

这里推荐安装使用MybatisX插件,非常方便在接口与XML映射文件之间来回跳转!以及可以生成标签

IDEA的File-》Settings-》Plugins 搜索MybatisX安装即可!

在这里插入图片描述


三、mapper标签

mapper标签,它是最顶级的标签,也就是XML根标签,通过namespace属性指定对应的接口,比如这里指定的是:org.tg.book.dal.mapper.UserMapper,这样接口和XML映射文件就产生了关联,接口通过JDK动态代理生成实现类时,就会读取XML映射文件的对应配置!

如何配置呢?常用的XML标签有:

  • select标签(对应写查询SQL语句)
  • resultMap标签(结果映射,上文曾介绍过)
  • insert标签(对应写插入INSERT语句)
  • update标签(对应写修改UPDATE语句)
  • delete标签(对应写删除DELETE语句)
  • sql标签(对应写SQL语句,这个SQL语句可被其他语句引用的可重用的语句块)

四、select标签

我们先删除上文的注解方式,换成XML映射文件的方式来实现!

UserMapper接口方法

@Param指定参数名

public interface UserMapper {User selectByUserNamePassword(@Param("userName") String userName,@Param("password") String password);
}

这时MybatisX插件会提示一个错误,把鼠标悬浮在方法上,会提示selectByUserNamePassword方法在xml中没有定义,我们点击Generate statement

MybatisX生成接口方法对应的xml

UserMapper.xml

这时,在UserMapper.xml中会生成一个select标签使用id属性指定对应的接口方法名,使用resultType属性指定返回类型,如下图:

Mybatis 生成select标签

这里依然有一个警告:XML tag has empty body,是因为我们没有写对应的查询select语句SQL,我们在select标签中补充SQL语句如下:

select * from user where user_name =#{userName} and password =#{password}

SQL中的参数使用#{}作为占位符
Mybatis select sql

实际的效果与上文使用的@Select注解相同!


五、resultMap标签

同样的,运行后你会发现【User对象】的userId并没有取到值,原因是【user表】的字段名叫id,而不是userId,名称不同所以无法获取到对应的值,我们通过resultMap标签方式解决。

定义resultMap标签

<resultMap id="UserMap" type="org.tg.book.dal.po.User"><id column="id" jdbcType="INTEGER" property="userId"/><result column="user_name" jdbcType="VARCHAR" property="userName"/><result column="password" jdbcType="VARCHAR" property="password"/>
</resultMap>

resultMap标签说明:

  • 通过id属性定义唯一标识,type属性定义结果类型
  • 通过id标签指定主键列, result标签指定非主键列
    • property指定对象的属性名
    • column指定数据表的列名
    • jdbcType指定数据表的字段类型

修改select标签

使用resultMap属性代替了resultType属性,resultMap属性内指定刚定义的resultMap id名称。

Mybatis resultMap

实际的效果与上文使用的@Results和@Result注解相同!

OK,到这,我们就使用XML映射文件方式,完整实现了接口方法selectByUserNamePassword!

总结

写一个数据库查询方法,简单来说,步骤如下:

  1. 创建接口对应的xml映射文件
  2. 创建查询方法对应的select标签
  3. 写查询selec语句SQL
  4. 【可选】如果【数据库字段】与【PO对象属性】不一致,需要增加结果映射resultMap标签,然后在select标签使用resultMap属性指定resultMap标签

相关文章:

5.3 Mybatis映射文件 - 零基础入门,轻松学会查询的select标签和resultMap标签

本文目录 前言一、创建XML映射文件二、MybatisX插件安装三、mapper标签四、select标签UserMapper接口方法UserMapper.xml 五、resultMap标签定义resultMap标签修改select标签 总结 前言 MyBatis的强大在于它的语句映射&#xff0c;它提供了注解和XML映射文件两种开发方式&…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附获奖论文和python代码实现)

目录 摘 要: 1 问题重述 1.1 问题背景 1.2 问题重述 2 模型假设 3 符号说明...

C6678开发概述与Sys/bios基本使用

C6678开发概述 参考开发环境标记及术语创建sys/bios自定义平台运行第一个sys/bios程序Clock模块使用Demo 参考 TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor Datasheet TMS320C66x DSP CorePac User Guide 官方手册 创龙6678开发教程 开发环境 …...

python算法中的图算法之网络流算法(详解二)

目录 学习目标: 学习内容: 网络流算法 Ⅰ. 网络流模型 Ⅱ . Ford-Fulk...

企业电子招投标采购系统之项目说明和开发类型源码

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…...

ERTEC200P-2 PROFINET设备完全开发手册(8-1)

8.1 IRT通讯实验 这里我们使用APP3 IsoApp&#xff0c;修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 3 使能App3&#xff0c;对应的主程序为“usriod_main_isoapp.c” 编译后下载运行。打开4.2建立的TIA项目&#xff0c;添加等时模式组织块&#xff0c…...

手撕Twitter推荐算法

Twitter近期开源了其推荐系统源码[1,2,3]&#xff0c;截止现在已经接近36k star。但网上公开的文章都是blog[1]直译&#xff0c;很拗口&#xff0c;因此特地开个系列系统分享下。系列涵盖&#xff1a; Twitter整体推荐系统架构&#xff1a;涵盖图数据挖掘、召回、精排、规则多…...

JAVA多态性测试的基本实验------JAVA入门基础教程

package duotai;public class Person {public void eat(){System.out.println("人吃饭");}public void Pdrink(){System.out.println("人喝水");} }package duotai;public class Man extends Person {public void eat(){System.out.println("男人吃饭…...

小说作者推荐: 妄鸦合集

《惊悚练习生》作品介绍 主人公叫弥赛亚,宗九的小说是《惊悚练习生》&#xff0c;它的作者是妄鸦倾心创作的一本现代耽美、娱乐圈、才女类型的小说&#xff0c;书中主要讲述了&#xff1a;作者&#xff1a;妄鸦 落魄魔术师宗九穿书了他穿到一本恐怖无限流选秀文里&#xff0c…...

MySQL-自带工具介绍

目录 &#x1f341;mysql &#x1f341;mysqladmin &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;MySQL专栏&#xff1a;MySQL专栏地址 MySQL数据库不仅提供了数据库的服务器端应用程序&#xff0c;同时还提供了大量的客户端工具程序&#xff0c;如mysql&a…...

12个你应该知道的Python库

12个你应该知道的Python库 1. python命令行argparse 更简单的begins2. colorama改善命令行窗口3. pyqtgraph 它提供了不同的功能选择&#xff0c;尤其适用于实时和交互式可视化4. 网页浏览器Pywebview5. psutil 提供了完整的获取系统信息的方法 或许cpu近5s的基本报告6. Watchd…...

【数据分析之道-NumPy(七)】numpy字符串函数

文章目录 专栏导读1、函数说明2、add()函数3、multiply()函数4、center()函数5、capitalize()函数6、title()函数7、lower()函数8、upper()函数9、split()函数10、splitlines()函数11、strip()函数12、join()函数 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Pytho…...

【Linux】Linux基本指令(1)

一.前言 从这篇文章开始&#xff0c;博主就开启了Linux学习之路了&#xff0c;本篇文章也是博主的第一篇Linux的文章&#xff0c;今后也会持续不断更新的。 二.理解文件 1.文件 文件文件数据文件属性&#xff08;所以一个建好的文件就算没有数据&#xff0c;也占用存储空间&am…...

更全面的对比GPT4和Claude对MLIR的掌握能力

本文构造了20个MLIR基础概念的问题以及使用OneFlow IR转换为Tosa IR的5个代码段来评测GPT4和Claude对于MLIR的掌握能力&#xff0c;我的结论是对于基础概念的理解Claude整体上和GPT4持平&#xff0c;而在阅读相关代码片段时Claude表现出了比GPT4更强一点的理解能力。 0x0. 前言…...

阿里ARouter 路由框架解析

一、简介 众所周知&#xff0c;在日常开发中&#xff0c;随着项目业务越来越复杂&#xff0c;项目中的代码量也越来越多&#xff0c;如果维护、扩展、解耦等成了一个非常头疼问题&#xff0c;随之孕育而生的诸如插件化、组件化、模块化等热门技术。 而其中组件化中一项的难点&…...

大型医院健康体检管理系统源码(PEIS)

一、体检管理系统&#xff08;PEIS&#xff09;概念 体检管理系统&#xff08;PEIS&#xff09;是以健康为中心的身体检查。一般医学家认为健康体检是指在身体尚未出现明显疾病时&#xff0c;对身体进行的全面检查。方便了解身体情况&#xff0c;筛查身体疾病。即应用体检手段对…...

java 获取时间的方法

Java的时间是通过字节码指令来控制的&#xff0c;所以 java程序的运行时间是通过字节码指令来控制的。但是由于 Java程序在运行时&#xff0c; JVM会产生一些状态&#xff0c;所以在执行 JVM指令时&#xff0c; JVM也会产生一些状态。 我们在执行 java程序时&#xff0c;主要是…...

Block原理(二)- 用白话说说底层源码,不扯代码

之前有一篇关于block的源码探究分析 Block原理&#xff08;一&#xff09;&#xff0c;时至今日&#xff0c;总觉的那篇文章说得不够流畅&#xff0c;今天打算从顶层设计的角度试着拆解下block的设计思想&#xff0c;拗脑的源码部分就不必再次触碰了&#xff0c;尽量保障这篇文…...

springboot整合knife4j接口文档成公共模块使用

theme: smartblue 之前项目中一直用的是swagger-ui进行接口文档的调用和使用&#xff0c;最近前端一直反馈页面不美观&#xff0c;调用凌乱&#xff0c;等一系列问题。基于这个问题我决定将其进行更改调整&#xff0c;上网搜索了一下发现knife4j是目前接口文档不错的一款插件。…...

软件测试需要学什么

软件测试近些年也是比较热门的行业&#xff0c;薪资高、入门门槛低&#xff0c;让很多开发人员想纷纷加入软件开发这个行业&#xff0c;想要成为这一岗位的一员&#xff0c;想要进入软件测试行业&#xff0c;他们需要学习什么呢&#xff1f; 软件测试需要学习的还挺多的&#…...

ARM Jazelle技术:硬件加速Java字节码执行详解

1. ARM Jazelle技术概述Jazelle技术是ARM架构中用于硬件加速Java字节码执行的关键扩展&#xff0c;最早出现在ARMv5TE架构中。这项技术通过在处理器内部集成Java字节码执行单元&#xff0c;实现了Java虚拟机(JVM)功能的硬件化。与传统的软件解释器相比&#xff0c;Jazelle能够将…...

氛围驱动开发:数据化提升开发者效率与团队协作的实践指南

1. 项目概述&#xff1a;当开发节奏遇上“氛围感”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“vibe-driven-dev”。光看名字&#xff0c;你可能会有点摸不着头脑——“氛围驱动开发”&#xff1f;这听起来不像是一个传统的技术框架或工具库。没错&#xff0c;它确实…...

基于BLE信号强度的寻物游戏:用CircuitPython实现无线接近探测

1. 项目概述&#xff1a;一个用蓝牙信号“捉迷藏”的硬件游戏几年前我第一次接触Adafruit的Circuit Playground系列开发板时&#xff0c;就被它那种“开箱即玩”的理念吸引了。它把LED、按钮、传感器都集成在一块板子上&#xff0c;让你不用焊接就能快速验证想法。后来出的Circ…...

DIY LED眼妆:从电路原理到穿戴制作的完整指南

1. 项目概述&#xff1a;打造你的专属发光眼妆想为下一次Cosplay活动或万圣节派对增添一抹赛博朋克般的未来感吗&#xff1f;厌倦了千篇一律的商店货&#xff0c;渴望一件真正独一无二、能让你在人群中脱颖而出的发光装饰&#xff1f;这个DIY LED眼妆项目&#xff0c;正是为你准…...

给UE4蓝图和C++开发者的Lua/UnLua入门:什么时候该用,怎么设计架构?

UE4架构设计指南&#xff1a;何时引入Lua与UnLua的最佳实践 当你在UE4项目中频繁修改玩法逻辑时&#xff0c;是否经历过这样的困境&#xff1a;每次调整都需要重新编译C代码&#xff0c;等待时间从几分钟到几小时不等&#xff1b;或者蓝图节点越连越多&#xff0c;最终变成难以…...

RK3288嵌入式开发实战:硬件架构、软件定制与典型应用场景解析

1. 项目概述&#xff1a;为什么RK3288至今仍是嵌入式开发的“硬通货”&#xff1f; 在嵌入式开发这个行当里&#xff0c;选型是个技术活&#xff0c;更是个经验活。你既要考虑当下的性能需求&#xff0c;又要掂量未来的扩展可能&#xff0c;还得平衡成本、功耗和开发周期。从业…...

Midjourney极简艺术风格实战手册(2024V6.2最新适配版):含17个已验证失效词黑名单与8组高通过率--sref权重组合

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney极简艺术风格的核心定义与美学边界 极简艺术风格在 Midjourney 中并非单纯减少元素&#xff0c;而是通过语义压缩、形式提纯与负空间策略构建高度凝练的视觉语言。其核心在于以最少的视觉单元…...

电解电容核心参数解析:从ESR、纹波电流到选型实战

1. 项目概述&#xff1a;从“黑疙瘩”到电路心脏在电子工程师的物料盒里&#xff0c;电解电容绝对是个让人又爱又恨的家伙。它不像电阻那样温顺稳定&#xff0c;也不像芯片那样精密复杂&#xff0c;它就是个黑乎乎的圆柱体&#xff0c;或者扁平的方块&#xff0c;上面印着一些让…...

软电路入门:用导电缝纫线与LED制作可穿戴发光作品

1. 项目概述&#xff1a;当缝纫遇见电路 几年前&#xff0c;我第一次把一颗会发光的LED缝到帆布包上时&#xff0c;那种感觉非常奇妙。它不再是冰冷的电路板&#xff0c;而是布料纹理的一部分&#xff0c;随着针脚的走向亮起柔和的光。这就是软电路&#xff0c;或者说电子纺织品…...

SpringBoot 项目基于责任链模式实现复杂接口的解耦和动态编排

一、背景 项目中有一个 OpenApi 接口提供给客户&#xff08;上游系统&#xff09;调用。 这个接口中包含十几个功能点&#xff0c;比如&#xff1a;入参校验、系统配置校验、基本数据入库、核心数据入库、发送给消息中心、发送给 MQ… 不同的客户对这个接口的要求也不同&…...