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

news2024/11/19 15:24:30

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标签

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

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

相关文章

jenkins——邮件告警

文章目录 一、下载 Email Extension 插件二、修改系统配置项目1、Jenkins Location配置2、邮件通知配置&#xff08;用于测试连通性&#xff09;3、Extended E-mail Notification配置4、Jenkins Location 配置5、在 job 中配置邮件发送6、高级设置7、配置发送 trigger8、构建验…

arduino学习笔记3

一.RGB三色小灯实验 1.源代码 int rgb_R11;//接到板子上面的PWM口11 R int rgb_G9;//接到板子上面的PWM口9 G int rgb_B10;//接到板子上面的PWM口10 B void setup() {pinMode(rgb_R,OUTPUT);//设置rgb_R的控制口为输出模式pinMode(rgb_G,OUTPUT);//设置rgb_G的控制口为输出模…

多线程【进阶版】

目录 一. 常见的锁策略 1.1 乐观锁和悲观锁 1.2 轻量级锁和重量级锁 1.3 自旋锁和挂起等待锁 1.4 互斥锁和读写锁 1.5 可重入锁和不可重入锁 1.6 公平锁和非公平锁 1.7 关于锁策略的相关面试题 二. CAS 三. Synchronized 原理 3.1 基本特点 3.2 加锁步骤 3.3 锁消除…

利用宏简化Q_PROPERTY动态属性的定义

目录 写在前面实现历程传统定义方式预想的方式(事实上有一点点区别) 例程mainwindow.hmainwindow.cppmain.cpp 执行结果如上事实的使用方法 写在前面 上一篇写了pyqt如何更加便利地定义动态属性&#xff0c;关于C版的其实在我刚接触Qt不久就想过并做了一些尝试&#xff0c;但死…

C. Vus the Cossack and Strings(异或判断二进制位匹配数奇偶)

Problem - C - Codeforces 题目描述 Vus the Cossack has two binary strings, that is, strings that consist only of "0" and "1". We call these strings aa and bb . It is known that |b| \leq |a|∣b∣≤∣a∣ , that is, the length of bb is at m…

手把手教你学习IEC104协议和编程实现 十二-读取定值

不废话,直接接上一章开始。忘记的复习一下上一章。 读取多个/全部定值 结构 设计思路 先说一下,读取多个定值的思路,首先。。。我靠,好长时间不看这一部分的程序,忘记了,待我先好好捋一捋。。。 言归正传,首先我们要选择我们要调用的定值。如下图: 大概就这样举个例…

2023年数据治理工程师证书有哪些值得考?DAMA-CDGA/CDGP

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

CDR2023新版本安装下载教程

CDR2023是最新发布的一款强大且专业的图像设计软件,适用于平面设计、装饰设计、产品包装设计等领域。coco玛奇朵其主要功能如下: 1. 矢量图形设计:提供强大的绘图与编辑工具,支持创建和编辑各种矢量图形,如线条、曲线、矩形、椭圆、星形等。 2. 文字编辑:提供文字输入、编辑与…

Docker资源控制和镜像

目录 第一章Docker的资源控制 1.2.对内存使用的限制 1.3.对磁盘IO配额控制&#xff08;blkio&#xff09;的限制 第二章Docker 的数据管理 2.1.数据卷 2.2.数据卷容器 2.3.端口映射 2.4.容器互联&#xff08;使用centos镜像&#xff09; 第三章.Docker 镜像的创建 3.…

java 实现对称加密的方法

对称加密是一种加密算法&#xff0c;它和非对称加密的区别在于&#xff1a;加密和解密使用不同的密钥&#xff0c;对称加密使用同一个密钥对数据进行加密和解密。 今天我们来学习下对称加密的实现方法&#xff0c;不需要使用到私钥&#xff0c;只需要用到公钥。 首先我们来看下…

气传导蓝牙耳机优缺点有哪些?气传导耳机科普及推荐

气传导蓝牙耳机&#xff0c;可以说是目前使用场景最全的种类&#xff0c;个人认为&#xff0c;这种耳机也同时是目前最好的耳机体验形态&#xff0c;将会是主流的长时间佩戴的耳机形态&#xff0c;甚至是未来智能耳机终极形态。 不过目前大多数人都还没有接触过这类蓝牙耳机&a…

污水处理厂的工艺流程有哪些?

对于普通人来说&#xff0c;一个完整的污水处理过程是相当神秘的&#xff0c;那么&#xff0c;今天我们来聊一下&#xff0c;一个完整的污水处理厂的工艺流程&#xff0c;都包括了哪方面的内容&#xff0c;一起来了解一下吧&#xff01; 一、污水处理厂的工艺流程 1、先进行污…

项目管理中,管理者如何打造团队执行力?

作为一名优秀的团队管理者&#xff0c;首先应该以身作则&#xff0c;成为团队的榜样&#xff0c;并将自己的良好工作作风带入团队中&#xff0c;影响团队成员&#xff0c;以真诚的态度打动每一位成员&#xff0c;促进团队之间的默契合作。 团队执行力的最重要原因通常与团队的…

项目管理工具哪家使用更便捷?

项目管理作为企业管理中的一个重要分支&#xff0c;受到越来越多企业及商业人士的关注。事实上&#xff0c;项目管理是基于有限的技能、人力、物质资源和其他资源&#xff0c;完成一个项目的过程。项目管理软件和工具哪家好&#xff1f;Zoho Projects项目管理工具可以帮助企业提…

【应急响应】拒绝服务钓鱼指南DDOS压力测试邮件反制分析应用日志

文章目录 内网应急-日志分析-爆破&横向&数据库红队APT-钓鱼邮件-内容&发信人&附件拒绝攻击-DDOS&CC-代理&防火墙防御 内网应急-日志分析-爆破&横向&数据库 1、协议口令爆破事件(以SQLserver、RDP为例) 查看SQL server日志文件(可以看到密码爆…

女程序员晒出11月的工资条:工资是高,但是真累,说老十岁一点也不过分

现在网上又好多人晒工资。有服务员、工人、护士、教师还有“程序猿”。程序员在大多数人眼里都是“高智商”&#xff0c;高薪资&#xff0c;那程序员到底一月的工资能开多少呢? 前两天有位女程序员在网上晒出了11月的工资条&#xff0c;说&#xff1a; 工资是高(比起有些人算…

jenkins——参数化配置、插件安装以及Jenkins SSH 插件安装

文章目录 一、Jenkins 参数化配置参数化 Job 的配置 二、插件安装1、插件安装入口2、插件管理代理3、插件新装4、插件更新5、插件移除和禁用 三、Jenkins SSH 插件安装1、下载 SSHAgent 插件2、SSHAgent 相关使用 一、Jenkins 参数化配置 同一个项目需要在不同环境下测试 参数…

智能工厂技术架构、系统架构、数据架构、应用架构及场景应用方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 流程制造-智能工厂规划设计工作总体视图 流程制造-智能工厂总体业务框架 根据业务调研和分析&#xff0c;勾勒出流程制造-智能工厂的总体业务框架&#xff0c;涵盖计划经营…

Netty核心源码分析(一),Netty的Server端启动过程源码分析

文章目录 系列文章目录一、Netty的Server端启动过程源码分析1、NioEventLoopGroup的创建&#xff08;1&#xff09;构造方法 2、ServerBootstrap的创建&#xff08;1&#xff09;构造方法&#xff08;2&#xff09;group方法&#xff08;3&#xff09;channel方法&#xff08;4…

机器学习——结构风险最小化(SRM)

问&#xff1a;基于结构风险最小化 (SRM)原则会倾向于选择更复杂的模型&#xff0c;因此其泛化能力一般较差。 答&#xff1a;错误&#xff0c;基于经验风险最小化&#xff08;ERM&#xff09;会倾向于选择更复杂的模型。基于结构风险最小化原则的模型选择会考虑模型的复杂度和…