🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

📊 MyBatis CRUD 核心实现方式一览

🧱 一、核心实现步骤

🖋️ 二、XML 与注解方式

⚙️ 三、实用高级特性

⚠️ 四、事务管理与性能优化

💡 五、MyBatis-Plus 简介

💎 总结


MyBatis 是一款非常流行的 Java 持久层框架,它通过简化 JDBC 代码、提供灵活的 SQL 映射配置,让数据库操作变得更加直观和高效。下面我将为你梳理 MyBatis 实现增删查改(CRUD)的核心方式和一些实用技巧。

📊 MyBatis CRUD 核心实现方式一览

操作类型

XML 配置示例

注解示例

关键点

​增加​

<insert id="insertUser"> INSERT INTO user(...) VALUES(...) </insert>

@Insert("INSERT INTO user(...) VALUES(...)")

可使用 useGeneratedKeys获取自增主键。

​查询​

<select id="selectUserById"> SELECT * FROM user WHERE id = #{id} </select>

@Select("SELECT * FROM user WHERE id = #{id}")

注意设置 resultTyperesultMap

​更新​

<update id="updateUser"> UPDATE user SET ... WHERE ... </update>

@Update("UPDATE user SET ... WHERE ...")

返回值为受影响的行数。

​删除​

<delete id="deleteUserById"> DELETE FROM user WHERE id = #{id} </delete>

@Delete("DELETE FROM user WHERE id = #{id}")

返回值为受影响的行数。

​批量​

<insert id="insertBatch"> INSERT INTO user (...) VALUES <foreach ...> (...) </foreach> </insert>

无直接注解,建议使用 XML 或 @InsertProvider

使用 <foreach>标签遍历集合。

🧱 一、核心实现步骤

MyBatis 的 CRUD 操作通常遵循以下步骤,无论使用 XML 还是注解方式,其核心流程是一致的。

  1. ​准备环境​​:配置 SqlSessionFactory(通常基于 XML 配置文件或 Java 配置),并确保 Mapper 接口或 XML 映射文件能被正确扫描。

  2. ​定义 Mapper 接口​​:在 Java 接口中声明业务相关的数据库操作方法。

  3. ​编写 SQL​​:通过 ​​XML 文件​​(在 <insert>, <select>, <update>, <delete>标签内写 SQL) 或 ​​注解​​(如 @Insert, @Select等,直接在接口方法上写 SQL) 来实现 SQL 映射。

  4. ​执行操作​​:通过 SqlSession获取 Mapper 接口的代理对象,并调用其方法。

🖋️ 二、XML 与注解方式

MyBatis 支持 XML 和注解两种方式来配置 SQL 映射,各有优缺点。

特性

XML 方式

注解方式

​可读性​

​复杂 SQL 更清晰​​,结构性强

SQL 与 Java 代码混杂,​​复杂 SQL 可读性降低​

​维护性​

SQL 变动​​需修改 XML 文件​

SQL 变动​​只需修改注解​​,无需关注文件

​动态 SQL​

​支持强大​​,使用 <if>, <foreach>等标签十分方便

​支持较弱​​,需配合 @SelectProvider等注解构建动态 SQL

​适用场景​

​复杂 SQL​​、​​大量 SQL​​、​​需要动态 SQL​​ 的场景

​简单 CRUD​​、​​快速开发​​、​​SQL 量少​​的场景

​选择建议​​:对于复杂的项目或需要大量使用动态 SQL 的场景,​​XML 方式通常是更好的选择​​。 而对于简单的 CRUD 操作,注解方式则更加简洁快速。

⚙️ 三、实用高级特性

  1. ​动态 SQL​

    MyBatis 提供了强大的动态 SQL 功能,允许你构建灵活的 SQL 语句。 常用的标签有:

    • <if>​:用于条件判断。

    • <where>​:会智能地处理 WHERE子句前的 ANDOR,避免语法错误。

    • <foreach>​:常用于 IN条件或批量操作中遍历集合。

    • <set>​:用于动态更新语句,智能处理逗号。

    <select id="findUsers" resultType="User">
      SELECT * FROM user
      <where>
        <if test="name != null and name != ''">
           AND name LIKE #{name}
        </if>
        <if test="age != null">
           AND age = #{age}
        </if>
      </where>
    </select>
  2. ​批量操作​

    批量操作能显著提升大量数据插入、更新或删除的性能。

    <insert id="insertUsersBatch">
      INSERT INTO user (name, age) VALUES
      <foreach collection="list" item="user" separator=",">
        (#{user.name}, #{user.age})
      </foreach>
    </insert>
  3. ​结果映射 (resultMap)​

    当数据库字段名与 Java 对象属性名不一致,或需要进行复杂关联查询(如一对一、一对多)时,resultMap非常有用。

    <resultMap id="userResultMap" type="User">
      <id property="id" column="user_id"/>
      <result property="userName" column="user_name"/>
      <!-- 其他字段映射 -->
      <association property="department" javaType="Department">...</association>
      <collection property="roles" ofType="Role">...</collection>
    </resultMap>

⚠️ 四、事务管理与性能优化

  1. ​事务管理​​:​​默认情况下,MyBatis 的 SqlSession不会自动提交事务​​。 在执行插入、更新、删除操作后,​​必须手动调用 sqlSession.commit()​ 来提交事务,更改才会持久化到数据库。 你也可以在获取 SqlSession时传入 true参数来开启自动提交(生产环境需谨慎)。

  2. ​性能优化​​:

    • ​合理使用缓存​​:MyBatis 提供了一级缓存(SqlSession级别)和二级缓存(Mapper级别)机制,合理使用可以减少数据库查询次数。

    • ​使用连接池​​:配置高效的数据库连接池(如 HikariCP)对性能提升至关重要。

    • ​优化 SQL 语句​​:避免使用 SELECT *,只获取需要的字段。

💡 五、MyBatis-Plus 简介

MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,旨在简化开发、提高效率。 其核心特性包括:

  • ​无侵入​​:只做增强,引入它不会对现有工程产生影响。

  • ​强大的 CRUD 操作​​:内置通用 Mapper,通过继承 BaseMapper接口,​​无需编写任何 XML​​,即可获得常用的单表 CRUD 方法。

  • ​内置分页插件​​:基于 MyBatis 物理分页,配置简单,无需担心性能问题。

  • ​丰富的全局配置​​:支持全局逻辑删除、自动填充(如创建时间、更新时间)等常用功能。

如果你的项目主要以单表操作居多,且希望进一步减少 SQL 编写工作量,MyBatis-Plus 是一个非常好的选择。

💎 总结

掌握 MyBatis 的 CRUD 操作是使用该框架的基础。关键在于:

  • 根据项目​​复杂度​​和​​团队习惯​​,在 ​​XML​​ 和​​注解​​间做出合适选择。

  • 善用​​动态 SQL​​ 和​​批量操作​​ 来处理复杂场景和提升性能。

  • 牢记​​手动提交事务​​。

  • 对于大量单表操作,可以考虑使用 ​​MyBatis-Plus​​ 来进一步提升开发效率。

希望这些信息能帮助你更好地理解和使用 MyBatis。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐