Mybatis详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis详解相关的知识,希望对你有一定的参考价值。

Hello,我是CoderBug,今天我们来学习Mybatis.

1.什么是Mybatis?

MyBatis 是一个 Java 持久层框架,它提供了一种简单的方法来映射 Java 对象到数据库表中。它允许你使用简单的 SQL 或存储过程来访问数据库,而无需手写任何 JDBC 代码。

2. Mybatis有哪些优点?

  • MyBatis 的主要优点之一是它的灵活性。它提供了很多的配置选项,允许你根据需要自定义映射方式。例如,你可以使用 MyBatis 定义简单的一对一映射,也可以使用它定义复杂的一对多映射。
  • 另一个 MyBatis 的优点是它支持动态 SQL。这意味着你可以使用 MyBatis 生成动态的 SQL 语句,并根据需要自动生成 WHERE 子句或排序子句。这使得 MyBatis 非常适用于构建复杂的查询。

3.Mybatis的使用步骤

使用 MyBatis 的主要步骤如下:

  1. 创建一个 MyBatis 配置文件,用于配置数据库连接信息和映射文件的位置。
  2. 创建一个映射文件,用于定义 SQL 语句和它们对应的 Java 对象之间的映射。
  3. 创建一个 Java 接口,用于定义映射文件中的 SQL 语句对应的方法。这个 Java 接口称为 "映射接口"。
  4. 在代码中使用 MyBatis 操作数据库。

MyBatis 操作数据库的具体步骤

  1. 创建 SqlSessionFactory 对象。该对象负责根据 MyBatis 配置文件创建 SqlSession 对象。
  2. 创建 SqlSession 对象。该对象是 MyBatis 与数据库之间的连接会话,用于执行 SQL 语句和获取结果。
  3. 通过 SqlSession 对象获取映射接口的代理对象。
  4. 通过代理对象调用映射接口中的方法来执行 SQL 语句并获取结果。

MyBatis 还提供了许多其他的特性,如缓存机制、分页功能、多数据源支持等。

总的来说,MyBatis 是一个功能强大的持久层框架,它能为你的 Java 应用程序带来很多便利。如果你正在寻找一个简单、灵活的持久层框架,那么 MyBatis 可能是一个很好的选择。

4.Mybatis案例

你可以创建一个名为 "UserMapper" 的映射接口,用于操作 "Users" 表:

public interface UserMapper 
// 方法名和映射文件中的 SQL 语句相同
User getUserById(int id);
List<User> getAllUsers();
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);

每个方法都对应着映射文件中的一个 SQL 语句。例如,"getUserById" 方法对应的 SQL 语句可能是:

​SELECT * FROM Users WHERE id = #id ​

映射接口中的方法名和映射文件中的 SQL 语句名称必须相同,这样 MyBatis 才能正确地将方法和 SQL 语句关联起来。

通常,你需要为每个数据表创建一个映射接口,然后使用 MyBatis 生成对应的代理对象来执行 SQL 语句。

在使用 MyBatis 操作数据库时,你需要创建一个映射文件,用于定义 SQL 语句和它们对应的 Java 对象之间的映射。这个映射文件是一个 XML 文件,通常命名为 "XXXMapper.xml",其中 "XXX" 是映射接口的名称。

例如,如果你创建了一个名为 "UserMapper" 的映射接口,那么对应的映射文件应该命名为 "UserMapper.xml"。

在映射文件中,你需要为每个 SQL 语句创建一个 "select"、"insert"、"update" 或 "delete" 节点。每个节点中都包含一个 "id" 属性,用于与映射接口中的方法名称对应。

例如,你可以为 "UserMapper" 映射接口创建以下映射文件:

<?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="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.model.User">
SELECT * FROM Users WHERE id = #id
</select>
<select id="getAllUsers" resultType="com.example.model.User">
SELECT * FROM Users
</select>
<insert id="insertUser">
INSERT INTO Users (username, password) VALUES (#username, #password)
</insert>
<update id="updateUser">
UPDATE Users SET username = #username, password = #password WHERE id = #id
</update>
<delete id="deleteUser">
DELETE FROM Users WHERE id = #id
</delete>
</mapper>

在这个例子中,我们为 "UserMapper" 映射接口定义了五个 SQL语句:

  • "getUserById":根据用户 ID 查询用户信息。
  • "getAllUsers":查询所有用户信息。
  • "insertUser":插入新用户信息。
  • "updateUser":更新用户信息。
  • "deleteUser":根据用户 ID 删除用户。

在映射文件中,你可以使用 "#" 来表示参数占位符,并使用 "resultType" 属性来指定返回结果的类型。例如,"getUserById" 方法的返回结果类型为 "com.example.model.User"。

映射文件中的 SQL 语句可以使用 MyBatis 的动态 SQL 语句功能进行动态构建。例如,你可以使用 "if"、"where"、"trim" 等标签来构建动态的 WHERE 子句或排序子句。

总的来说,映射文件是 MyBatis 的重要组成部分,它负责定义SQL 语句和它们对应的 Java 对象之间的映射。你需要为每个数据表创建一个映射文件,并使用 MyBatis 的动态 SQL 功能来构建复杂的查询。

在 MyBatis 中,你还可以使用 "映射器" 来简化映射文件的编写。映射器是一种特殊的映射接口,它使用注解来定义 SQL 语句和 Java 对象之间的映射。例如,你可以使用 "@Select" 注解来定义 "select" 语句,使用 "@Insert" 注解来定义 "insert" 语句,以此类推。

使用映射器可以使你的代码更加简洁,并且可以省略映射文件的编写。例如,你可以使用以下代码定义 "UserMapper" 映射器:

@Mapper
public interface UserMapper
@Select("SELECT * FROM Users WHERE id = #id")
User getUserById(int id);

@Select("SELECT * FROM Users")
List<User> getAllUsers();

@Insert("INSERT INTO Users (username, password) VALUES (#username, #password)")
void insertUser(User user);

@Update("UPDATE Users SET username = #username, password = #password WHERE id = #id")
void updateUser(User user);

@Delete("DELETE FROM Users WHERE id = #id")
void deleteUser(int id);

使用映射器可以使你的代码更加简洁,并且省略了映射文件的编写。但是,映射器相对于映射文件有一些限制,例如不支持动态 SQL 语句。所以,你需要根据实际情况选择使用映射器还是映射文件。 总的来说,MyBatis 是一个功能强大的持久层框架,它能帮助你简化操作数据库的代码,并提供了丰富的特性。通过映射接口和映射文件或映射器,你可以轻松地操作数据库,并获取高效的结果。

如有帮助,麻烦点个赞,如有错误请指出,我是CoderBug,一个跟你一样追风的少年!

以上是关于Mybatis详解的主要内容,如果未能解决你的问题,请参考以下文章

《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项

Mybatis的缓存机制详解

MyBatis 源码分析 - 插件机制

MyBatis 动态sql详解

VO/DTO在spring boot2/mybatis plus项目中之简单应用

Mybatis