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

news/2024/11/17 3:32:38/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

在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.ppmy.cn/news/1531196.html

相关文章

js 如何监听 body 内容是否改变

如果您想监听body内容的变化&#xff0c;并作出响应&#xff0c;可以使用MutationObserver。以下是一个简单的例子&#xff0c;它会在body内容变化时在控制台输出一条消息&#xff1a; // 创建一个观察者对象 const observer new MutationObserver(function(mutations, obser…

001、restful设计规范

https://www.kancloud.cn/kancloud/rest-api-design-safety/78113 https://www.kancloud.cn/kancloud/http-api-design/78123 https://www.kancloud.cn/kancloud/http-api-guide/56268 restful接口设计规范 按照restful接口设计规范 GET &#xff08;SELECT&#xff09;&…

flutter 设置字体大小,适应各种屏幕

起因&#xff0c; 目的: 来源就是客户需求。 从个人角度来说&#xff0c;我讨厌 flutter, 和 java 一样&#xff0c; 都是 臃肿&#xff0c;繁琐&#xff0c;死板. 1. 过程: 根据用户的屏幕尺寸&#xff0c;把子元素大小&#xff0c; 字体的大小&#xff0c;都设置为百分比&…

Mac pnpm安装

安装pnpm的时候一定要把npm更新到最新版 不然pnpm下载不成功。 &#xff08;更新npm&#xff09;&#xff1a;sudo npm install -g npm (安装pnpm:) sudo npm install -g pnpm 检验安装是否成功&#xff1a;pnpm --version 项目内安装依赖&#xff1a;pnpm install / 运行项目&…

用Python实现运筹学——Day 4: 线性规划的几何表示

一、学习内容 线性规划的几何表示&#xff1a; 线性规划问题的解通常位于一个凸多边形&#xff08;即可行解空间&#xff09;的顶点上&#xff0c;这意味着在求解线性规划问题时&#xff0c;只需要找到可行解空间中的顶点并计算出目标函数值&#xff0c;再选择其中的最优解。 可…

车道线拟合

聚类如何帮助解决斑马线误拟合问题 聚类算法通过将相似的像素或特征点归为一类&#xff0c;可以用来分析图像中的不同结构&#xff08;例如车道线和斑马线&#xff09;。以下是一些具体的聚类方法和它们在车道线检测中的应用&#xff1a; 1. 基于几何特征的聚类 斑马线和车道…

解决R包依赖版本不兼容问题

ERROR: dependency ‘Matrix’ is not available for package ‘irlba’ removing ‘/root/anaconda3/envs/myview/lib/R/library/irlba’ ERROR: dependency ‘Matrix’ is not available for package ‘N2R’ removing ‘/root/anaconda3/envs/myview/lib/R/library/N2R’ ER…

【Python语言初识(五)】

一、文件和异常 在Python中实现文件的读写操作其实非常简单&#xff0c;通过Python内置的open函数&#xff0c;我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象&#xff0c;接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件&#…