Mybatis映射文件详解-mapper.xml文件

在Mybatis中,Mapper XML文件是用于定义SQL语句和Java方法之间映射关系的核心配置文件。通过这些文件,开发者可以将数据库中的表与Java对象进行映射,实现数据的持久化操作。本文将详细介绍Mybatis映射文件的相关知识,包括其结构、标签以及如何编写和使用。

一、Mybatis映射文件概述

Mybatis是一个Java持久层框架,它提供了一种简单易用的方式来访问和操作数据库。在Mybatis中,映射文件(Mapper XML)起到了至关重要的作用,它们定义了SQL语句与Java方法之间的映射关系。

二、映射文件的结构

Mapper XML文件通常用于定义与数据库交互的SQL语句和操作。它的基本结构如下所示:

<?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="cn.tedu.tea.admin.server.content.dao.persist.mapper.TagMapper"><!--    TagStandardVO getStandardById(Long id);--><select id="getStandardById" resultMap="StandardResultMap">SELECT id,name,parent_id,enable,sortFROM content_tagWHERE id=#{id}</select><resultMap id="StandardResultMap" type="cn.tedu.tea.admin.server.content.pojo.vo.TagStandardVO"><id column="id" property="id"></id><result column="name" property="name"></result><result column="parent_id" property="parentId"></result><result column="enable" property="enable"></result><result column="sort" property="sort"></result></resultMap></mapper>
Mapper XML文件详解

mapper元素是Mapper XML文件的根元素,它有一个namespace属性用于指定对应的Mapper接口或命名空间。

<mapper namespace="cn.tedu.tea.admin.server.content.dao.persist.mapper.TagMapper">
</mapper>

定义SQL语句和对应的操作:

: 用于执行查询操作。
: 用于执行插入操作。
: 用于执行更新操作。
: 用于执行删除操作。

每个标签有以下主要属性:

id: SQL语句的唯一标识符,可以通过这个id在Java代码中调用对应的SQL语句。
parameterType: SQL语句的参数类型,指定了传入SQL语句的参数类型。
resultType 或 resultMap: 如果是查询操作,可以通过resultType指定返回结果的类型,或者使用resultMap自定义结果映射规则。

查询操作
 <select id="selectByType"resultType="cn.tedu.baking.pojo.vo.ContentManagementVO">SELECT c.id,c.title,c.img_url,c.brief,c.type,cat.name categoryName,c.view_count,c.comment_count,c.create_timeFROM t_content cJOIN t_category cat ON c.category_id = cat.idWHERE c.type = #{type}AND c.create_by = #{id}</select>

这个示例中,标签定义了一个查询操作,id为selectUserById,返回结果类型为User,SQL语句为SELECT * FROM users WHERE id = #{id}。#{id}是占位符,表示动态传入的参数。

插入操作
 <insert id="insert">INSERT INTO t_contentVALUES (NULL, #{title}, #{imgUrl}, #{videoUrl},#{content}, #{type}, 0, 0, #{createBy},#{createTime}, null, null,#{brief}, #{categoryId})</insert>

这个示例中,标签定义了一个插入操作,id为insertUser,参数类型为User,SQL语句为INSERT INTO users (username, password) VALUES (#{username}, #{password})。#{username}和#{password}分别表示User对象中的属性。

更新操作
<update id="updateUser" parameterType="User">UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
</update>

这个示例中,标签定义了一个更新操作,id为updateUser,参数类型为User,SQL语句为UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}。这里的#{id}、#{username}和#{password}都是User对象的属性。

删除操作
  <delete id="deleteById">DELETEFROM t_contentWHERE id = #{id}</delete>

这个示例中,标签定义了一个删除操作,id为deleteUser,SQL语句为DELETE FROM users WHERE id = #{id},其中#{id}是动态传入的参数。

动态SQL

MyBatis支持使用、、、等标签来构建动态SQL语句,根据条件动态生成SQL片段,提高SQL语句的灵活性和可重用性。

<update id="update">UPDATE t_content<set><if test="title!=null">title=#{title},</if><if test="imgUrl!=null">img_url=#{imgUrl},</if><if test="brief!=null">brief=#{brief},</if><if test="videoUrl!=null">video_url=#{videoUrl},</if><if test="type!=null">type=#{type},</if><if test="categoryId!=null">category_id=#{categoryId},</if><if test="viewCount!=null">view_count=#{viewCount},</if><if test="commentCount!=null">comment_count=#{commentCount},</if><if test="updateBy!=null">update_by=#{updateBy},</if><if test="updateTime!=null">update_time=#{updateTime},</if><if test="content!=null">content=#{content}</if></set>WHERE id=#{id}</update>
结果映射

除了简单的resultType属性外,还可以使用标签自定义复杂的结果映射关系,将数据库中的查询结果映射到Java对象的属性中。

<select id="getStandardById" resultMap="StandardResultMap">SELECT id,name,parent_id,enable,sortFROM content_tagWHERE id=#{id}</select><resultMap id="StandardResultMap" type="cn.tedu.tea.admin.server.content.pojo.vo.TagStandardVO"><id column="id" property="id"></id><result column="name" property="name"></result><result column="parent_id" property="parentId"></result><result column="enable" property="enable"></result><result column="sort" property="sort"></result></resultMap>

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

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

相关文章

Python | Leetcode Python题解之第437题路径总和III

题目&#xff1a; 题解&#xff1a; class Solution:def pathSum(self, root: TreeNode, targetSum: int) -> int:prefix collections.defaultdict(int)prefix[0] 1def dfs(root, curr):if not root:return 0ret 0curr root.valret prefix[curr - targetSum]prefix[cu…

知识管理数据库

知识管理数据库&#xff0c;可以分为几类&#xff1a; 灵感库、卡片库、作品库。 灵感库&#xff0c;通常是素材&#xff0c;想法。 片库&#xff0c;是完整的&#xff0c;成段落的文字。 作品库&#xff0c;是文章、专栏&#xff0c;或者书籍。 这三者的关系&#xff0c;好比…

Java文件上传同时传入JSON参数

前言 此篇文章用于解决一个接口内同时完成文件的上传及JSON参数的传入(生产环境已验证); 1.准备接口 import cn.cdjs.vo.UserVO; import cn.hutool.json.JSONUtil; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFi…

黑马头条day3-3自媒体接口作业

黑马头条day3-3自媒体接口作业 1)素材管理 1.1)图片删除 接口描述 说明接口路径/api/v1/material/del_picture/{id}请求方式GET参数Integer id响应结果ResponseResult 返回结果实例&#xff1a; 实现思路 感觉删除比较难写 因为需要判断图片是不是和文章挂钩了 gpt帮了很…

Spring Cloud 教程(二) | 搭建SpringCloudAlibaba

Spring Cloud 教程&#xff08;二&#xff09; | 搭建SpringCloudAlibaba 前言一、SpringBoot 与 SpringCloud 版本对应关系&#xff1a;二、SpringCloud 与 SpringCloudAlibaba版本对应关系&#xff1a;三、SpringCloudAlibaba版本 与 组件版本 对应关系&#xff1a;四、搭建S…

【Redis】主从复制(上)

文章目录 1.主从复制的基本概念基本概念主从复制的作用 2.在一个服务器上建立一个主从结构的redis集群建立主从关系断开主从关系redis中重要配置安全性只读传输延迟 3.主从关系--拓扑结构一主一从一主多从树形主从结构 1.主从复制的基本概念 基本概念 Redis 的主从复制&#…

AI驱动TDSQL-C Serverless 数据库技术实战营-融合智能体与TDSQL-C技术,高效实现二手房数据查询与分析应用

文章目录 什么是TDSQL-C技术创新算力服务器与数据库服务器申请与部署购买 TDSQL-C Mysql Serverless 实例购买HAI高算力服务器 准备工作准备数据下载依赖 案例研发创建数据库写入数据智能体与TDSQL-C 的结合应用第一步配置llama3.1第二步代码开发运行应用测试应用 总结 什么是T…

文献笔记 - Ground effect on rotorcraft unmanned aerial vehicles: a review

这篇博文是自己看文章顺手做的笔记 只是简单翻译和整理 仅做个人参考学习和分享 如果作者看到觉得内容不妥请联系我 我会及时处理 本人非文章作者&#xff0c;文献的引用格式如下&#xff0c;原文更有价值 摘要—— 收集和讨论小型多旋翼无人机受地面效应的影响&#xff0c;…

WEB攻防-JavaWweb项目JWT身份攻击组件安全访问控制

知识点&#xff1a; 1、JavaWeb常见安全及代码逻辑&#xff1b; 2、目录遍历&身份验证&逻辑&JWT&#xff1b; 3、访问控制&安全组件&越权&三方组件&#xff1b; 演示案例&#xff1a; JavaWeb-WebGoat8靶场搭建使用 安全问题-目录遍历&身份认…

第一个maven web工程(eclipse)

1、点击file--》new--》Maven Project&#xff0c;如下&#xff1a; 2、直接next&#xff0c;如下 3、搜索web原型&#xff0c;如下 4、填写项目的坐标&#xff0c;如下 5、创建完成后&#xff0c;需要自己补一个文件夹&#xff0c;名称为java&#xff0c;如下&#xff1a; …

C++进阶|多态知识点详解及经典面试题总结

&#x1f36c; mooridy-CSDN博客 &#x1f9c1;C专栏&#xff08;更新中&#xff01;&#xff09; 目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数的重写/覆盖 2.3 虚函数重写的⼀些其他问题 2.4 override 和 final关键字 2.5 重载/重写/隐藏的…

IDEA全局搜索快捷键ctrl+shift+f失效问题解决

目录 一、搜狗输入法 二、windows输入法 其实就是与输入法快捷键冲突了&#xff0c;一般用的最多的就是windows自带输入法和搜狗输入法&#xff0c;我们只需要把两个输入法的快捷键取消即可解决。 一、搜狗输入法 二、windows输入法 “设置”-“日期和时间”&#xff0c;选择…

Elasticsearch——介绍、安装与初步使用

目录 1.初识 Elasticsearch1.1.了解 ES1.1.1.Elasticsearch 的作用1.1.2.ELK技术栈1.1.3.Elasticsearch 和 Lucene1.1.4.为什么不是其他搜索技术&#xff1f;1.1.5.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.Elasticsearch 的一些概念1.3.1.文档和字…

【中级通信工程师】终端与业务(三):电信业务

【零基础3天通关中级通信工程师】 终端与业务(三)&#xff1a;电信业务 本文是中级通信工程师考试《终端与业务》科目第三章《电信业务》的复习资料和真题汇总。终端与业务是通信考试里最简单的科目&#xff0c;有效复习通过率可达90%以上&#xff0c;本文结合了高频考点和近几…

SQL 性能调优

什么是 SQL 性能调优 SQL 性能调优是优化 SQL 查询以尽可能高效地运行的过程&#xff0c;从而减少数据库负载并提高整体系统性能。这是通过各种技术实现的&#xff0c;例如分析查询执行计划、优化索引和重写查询以确保最佳执行路径。目标是最大限度地减少执行查询所需的时间和…

Windows安装openssl开发库

1 下载openssl安装包并安装 下载网址&#xff1a; https://slproweb.com/products/Win32OpenSSL.html 下载对应的安装版本。 双击安装包&#xff0c;一路下一步完成安装。注意&#xff1a;1.安装路径不要有空格&#xff1b; 2. 建议不要把DLL拷贝到系统路径。 2 编辑代码 …

什么是Node.js?

为什么JavaScript可以在浏览器中被执行&#xff1f; 在浏览器中我们加载了一些待执行JS代码&#xff0c;这些字符串要当中一个代码去执行&#xff0c;是因为浏览器中有JavaScript的解析引擎&#xff0c;它的存在我们的代码才能被执行。 不同的浏览器使用不同的javaScript解析引…

数据结构之链表(1),单链表

目录 前言 一、什么是链表 二、链表的分类 三、单链表 四、单链表的实现 五、SList.c文件完整代码 六、使用演示 总结 前言 本文讲述了什么是链表&#xff0c;以及实现了完整的单链表。 ❤️感谢支持&#xff0c;点赞关注不迷路❤️ 一、什么是链表 1.概念 概念&#xff1a;链…

19、网络安全合规复盘

数据来源&#xff1a;5.网络安全合规复盘_哔哩哔哩_bilibili

精密制造的革新:光谱共焦传感器与工业视觉相机的融合

在现代精密制造领域&#xff0c;对微小尺寸、高精度产品的检测需求日益迫切。光谱共焦传感器凭借其非接触、高精度测量特性脱颖而出&#xff0c;而工业视觉相机则以其高分辨率、实时成像能力著称。两者的融合&#xff0c;不仅解决了传统检测方式在微米级别测量上的局限&#xf…