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

 更新时间:2024年09月28日 14:54:34   作者:字节探索者  
本文详细介绍了Mybatis映射文件的结构、标签和使用方法,包括mapper元素、标签的主要属性如id、parameterType、resultType以及动态SQL和结果映射的使用,通过映射文件,可以将数据库表与Java对象映射,支持查询、插入、更新、删除等操作,提高了SQL语句的灵活性和可重用性

在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,sort
            FROM content_tag
            WHERE 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_time
        FROM t_content c
                 JOIN t_category cat ON c.category_id = cat.id
        WHERE 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_content
        VALUES (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">
        DELETE
        FROM t_content
        WHERE 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,sort
            FROM content_tag
            WHERE 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>

到此这篇关于Mybatis映射文件详解-mapper.xml文件的文章就介绍到这了,更多相关Mybatis mapper.xml文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringMVC异步处理操作(Callable和DeferredResult)

    SpringMVC异步处理操作(Callable和DeferredResult)

    这篇文章主要介绍了SpringMVC异步处理操作(Callable和DeferredResult),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • springboot启动报错Failed to load class [javax.servlet.Filter]的解决

    springboot启动报错Failed to load class [java

    这篇文章主要介绍了springboot启动报错Failed to load class [javax.servlet.Filter]的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-03-03
  • java贪吃蛇游戏实现代码

    java贪吃蛇游戏实现代码

    这篇文章主要为大家详细介绍了java贪吃蛇游戏实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Java生成堆内存dump的问题

    Java生成堆内存dump的问题

    这篇文章主要介绍了Java生成堆内存dump的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • JavaWeb开发之模仿知乎首页完整代码

    JavaWeb开发之模仿知乎首页完整代码

    这篇文章主要介绍了JavaWeb开发之模仿知乎首页完整代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • 基于SpringBoot+FastExcel的百万级数据导入导出完整方案

    基于SpringBoot+FastExcel的百万级数据导入导出完整方案

    本文详细介绍了在SpringBoot3.5.11+JDK17+MySQL环境下,使用FastExcel实现百万级数据的导入和导出,内容包括数据库表设计、百万测试数据生成、实体类与Mapper、配置文件、百万数据导入、百万数据导出、线程池、阻塞队列、CountDownLatch的设计思路与原理,以及接口测试方法
    2026-03-03
  • Spring IoC容器常见获取Bean的方式汇总示例解析

    Spring IoC容器常见获取Bean的方式汇总示例解析

    这篇文章主要为大家介绍了Spring IoC容器常见获取Bean的方式汇总示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 利用java实现二维码和背景图的合并

    利用java实现二维码和背景图的合并

    本文介绍如何使用java代码将自动生成的二维码放入背景模板中,对于java学习者或许有帮助,一起来看看。
    2016-07-07
  • Java微信公众平台之群发接口(高级群发)

    Java微信公众平台之群发接口(高级群发)

    这篇文章主要为大家详细介绍了Java微信公众平台之群发接口,高级群发功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 浅谈使用java解析和生成JSON

    浅谈使用java解析和生成JSON

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中google-gson和org.json比较简单,两者使用上差不多但还是有些区别。下面我们就来分别介绍下用他们构造和解析Json数据的方法示例。
    2015-08-08

最新评论