首页 > 其他分享 >Mybatis详解

Mybatis详解

时间:2022-12-29 22:32:26浏览次数:29  
标签:语句 Users 映射 MyBatis 详解 SQL Mybatis id

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,一个跟你一样追风的少年!

标签:语句,Users,映射,MyBatis,详解,SQL,Mybatis,id
From: https://blog.51cto.com/u_15921635/5978804

相关文章

  • 详解聚类算法Kmeans-重要参数init & random_state & n_init:初始质心怎么放更好【菜菜
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibiliinit在K-Means中有一个重要的环节,就是放置初始质心。如果有足够......
  • 详解网络层-网络层概述和编址【王道计算机网络笔记】
    主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层的传输单位是数据报,数据报是一个比较长的数据,分组是对数据报进行切割得到的一部分功能:......
  • Java开发学习(四十九)----MyBatisPlus更新语句之乐观锁
    1、概念在讲解乐观锁之前,我们还是先来分析下问题:业务并发现象带来的问题:秒杀假如有100个商品或者票在出售,为了能保证每个商品或者票只能被一个人购买,如何保证不会出......
  • Springoot - 整合MyBatis
    1.导入JDBC驱动因为我的是Mysql数据库版本是8.0.20导入对应版本的驱动即可<!--mysql依赖--><dependency><groupId>mysql</groupId>......
  • Linux程序编译过程详解
    大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因......
  • Go-21 Golang接口详解
    packagemainimport"fmt"//Golang中的接口详解/* 1.接口的介绍 2.Golang接口的定义 3.空接口 4.类型断言 5.结构体值接收者和指针接收者实现接口的区别 6.一......
  • 【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数
     [本篇博客热榜最高排名:7 ]写在前面 朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函......
  • .md文件格式语法详解,即markdown文件语法详解(图文并茂)
    相关链接:​​官网地址​​​​博客地址。截图​​​​博客地址。markdown版本,点击编辑​​​​源码地址。需IDEA克隆代码,用IDEA打开​​Markdown是一种轻量级的标记语言,本......
  • C++ 四种智能指针详解
    智能指针出现的原因:主要解决的是堆内存分配释放,忘记释放内存引发的内存泄漏问题,智能指针最主要的事情就是让程序员无需去注意内存释放,内存释放的问题放在智能指针内部进行处......
  • MyBatis修改操作注入动态全局参数
    有时候我们在更新字段的时候可能只更新一个状态,但是又需要记录当前的更新人和更新时间,比如:updateStatus(@Param("id")Stringid,@Param("status")Integerstatus);这......