当前位置: 首页 > 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; 软件测试需要学习的还挺多的&#…...

【蓝桥杯省赛真题17】python删除字符串 青少年组蓝桥杯python编程省赛真题解析

目录 python删除字符串 一、题目要求 1、编程实现 2、输入输出 二、解题思路...

C# LINQ 查询语句和方法的区别及使用

C# LINQ&#xff08;Language-Integrated Query&#xff09;是一种强类型、编译时的查询技术&#xff0c;它可以通过统一的语法对多种数据源进行查询和操作&#xff0c;包括对象、集合、数据库等。LINQ 提供了两种查询方式&#xff1a;查询语句和扩展方法。 查询语句&#xff…...

【nacos配置中心】源码部分解析

启动初始化 SpringApplication.prepareContext applyInitializers 回调ApplicationContextInitializer的initialize方法 getInitializers()从applicationContext获取List<ApplicationContextInitializer<?>> initializers 这个集合是通过SpringApplication的…...

Kotlin 1.6.0 的新特性

1、稳定版对于枚举、密封类与布尔值主语穷尽 when 语句 一个详尽的when语句包含了所有主题可能的类型或值的分支&#xff0c;或者对于一些类型包含一个else分支。它覆盖了所有可能的情况&#xff0c;使代码更加安全。 即将禁止非详尽的when语句&#xff0c;以使行为与when表达…...

nextjs13临时笔记

动态路由 文件夹以中括号命名[id] -pages: --list: ---[id]: ----index.jsx(访问路径/list/1 即这种形式/list/:id) ---index.jsx(访问路径/list)[...params]gpt接口分析 初始化项目 npm install next react react-dom # or yarn add next react react-dom # or pnpm add n…...

云计算与区块链之间有什么区别?

区块链是一种去中心化的分布式数字账本&#xff0c;可实现安全透明的交易和数据存储。 它使用节点网络来验证和验证交易。 云计算通过互联网提供计算资源&#xff0c;例如服务器、存储和软件。区块链是一种分散且不可变的虚拟数据分类账&#xff0c;用于维护交易信息和监控网络…...

sed命令常用例子

替换文件中的文本 将文件file.txt中的所有"old_text"替换成"new_text"&#xff1a; sed -i ‘s/old_text/new_text/g’ file.txt 删除文件中的某行 删除文件file.txt中的第5行&#xff1a; sed -i ‘5d’ file.txt 在文件中添加一行 在文件file.txt…...

MB510 3BSE002540R1在机器视觉工业领域最基本的应用

​ MB510 3BSE002540R1在机器视觉工业领域最基本的应用 大家都说人类感知外界信息的80%是通过眼睛获得的&#xff0c;图像包含的信息量是最巨大的。那么机器视觉技术的出现&#xff0c;就是为机器设备安上了感知外界的眼睛&#xff0c;使机器具有像人一样的视觉功能&#xff0c…...

nightingale-0-介绍单机二进制部署

(一) 夜莺介绍 Nightingale | 夜莺监控&#xff0c;一款先进的开源云原生监控分析系统&#xff0c;采用 All-In-One 的设计&#xff0c;集数据采集、可视化、监控告警、数据分析于一体&#xff0c;与云原生生态紧密集成&#xff0c;提供开箱即用的企业级监控分析和告警能力。于…...

一个从培训学校走出来的测试工程师自述....

简单介绍一下我自己&#xff0c;1997年的&#xff0c;毕业一年了&#xff0c;本科生&#xff0c;专业是机械制造及其自动化。 在校度过了四年&#xff0c;毕业&#xff0c;找工作&#xff0c;填三方协议&#xff0c;体检&#xff0c;入职。我觉得我可能就这么度过我平平无奇的…...