目录

一.概述

二.特点

三.组件

四.Mapper 

五.配置文件

六.使用步骤

七.高级功能

八.优点缺点

九.项目实战

1.打开idea创建一个Java项目,构建系统选“Maven”​

2.创建完成后若依赖报错,可通过下载或重新加载来解决​

3.配置pom.xml文件,为其添加合适版本的依赖,第二张图是小编本人的pom.xml文件,仅供参考

4.(可选)打开“文件”——“设置”,按下图调整设置​

5.连接数据库,输入账户密码,注意密码一定要输对

6.按下列步骤创建包和文件,xml文件只需要在创建文件时后缀名加“.xml”即可创建,总计六个文件五个包

7.src/main/java/com/example/mabatis目录下面的三个Java文件内容如下

8.两个xml文件内容如下(上面是UserMapper.xml对应内容,下面是mybatis-config.xml对应内容)(记得在password处输入数据库密码)

9.Test类代码如下

10.编译运行Test类代码,大功告成!​

11.如何使用

12.对于数据库


一.概述

       MyBatis 是一个优秀的 Java 持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。

二.特点


- **SQL 写在 XML 里,便于统一管理,解耦,可重用**
- **SQL 和 Java 代码分离,提高了可维护性**
- **提供 XML 标签,支持编写动态 SQL**
- **支持存储过程调用**
- **支持高级映射(一对多、多对一等)**
- **支持延迟加载和缓存**

三.组件


- **SqlSessionFactory**:是 MyBatis 的核心,负责创建 SqlSession 对象。
- **SqlSession**:是执行命令、获取映射器和管理事务的。
- **Mapper**:是 MyBatis 的映射器,通过 XML 或注解定义 SQL 语句和 Java 对象的映射关系。
- **MyBatis 配置文件**:定义了 MyBatis 的运行环境,包括数据库连接信息、事务管理、映射器等。

四.Mapper 


       Mapper 文件定义了 SQL 语句和 Java 对象的映射关系。以下是一个简单示例:

<?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="selectUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (name, age) VALUES (#{name}, #{age})
    </insert>
</mapper>

五.配置文件


       MyBatis 的配置文件主要包括以下内容:
- **数据库连接信息**
- **事务管理**
- **环境配置**
- **映射器配置**

        一个简单的 MyBatis 配置文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

六.使用步骤


1. **添加 MyBatis 依赖**
   在 Maven 项目中,可以在 `pom.xml` 文件中添加以下依赖:

   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.13</version>
   </dependency>

2. **创建 MyBatis 配置文件**
   如上所述,配置数据库连接信息、事务管理等。
3. **创建 Mapper 接口和 Mapper 文件**
   定义接口和对应的 XML 文件,编写 SQL 语句。
4. **创建 SqlSessionFactory**

   String resource = "mybatis-config.xml";
   InputStream inputStream = Resources.getResourceAsStream(resource);
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

5. **使用 SqlSession 执行操作**

   try (SqlSession session = sqlSessionFactory.openSession()) {
       UserMapper userMapper = session.getMapper(UserMapper.class);
       User user = userMapper.selectUserById(1);
       System.out.println(user.getName());
   }
 

七.高级功能


- **动态 SQL**
  MyBatis 支持通过 `<if>`、`<choose>`、`<when>`、`<otherwise>` 等标签编写动态 SQL。
- **缓存**
  MyBatis 提供一级缓存(SqlSession 级别)和二级缓存(Mapper 级别)。
- **延迟加载**
  MyBatis 支持延迟加载,可以在需要时才加载关联对象。
- **插件**
  MyBatis 支持插件机制,可以自定义插件来拦截和处理 MyBatis 的执行过程。

八.优点缺点


- **优点**
  - **灵活性高**:可以编写原生 SQL,支持动态 SQL。
  - **性能好**:通过缓存和延迟加载优化性能。
  - **解耦**:将 SQL 和 Java 代码分离。
- **缺点**
  - **SQL 编写工作量大**:需要手动编写 SQL 和映射文件。
  - **数据库依赖性高**:SQL 语句与数据库紧密耦合。

九.项目实战

1.打开idea创建一个Java项目,构建系统选“Maven”

2.创建完成后若依赖报错,可通过下载或重新加载来解决

3.配置pom.xml文件,为其添加合适版本的依赖,第二张图是小编本人的pom.xml文件,仅供参考

        <!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- MySQL JDBC 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>mybatis-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>24</maven.compiler.source><maven.compiler.target>24</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- MySQL JDBC 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</project>

4.(可选)打开“文件”——“设置”,按下图调整设置

5.连接数据库,输入账户密码,注意密码一定要输对

6.在数据库中输入以下代码并运行

CREATE DATABASE mybatis_demo;USE mybatis_demo;CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,age INT,email VARCHAR(100)
);

7.运行成功结果如下

6.按下列步骤创建包和文件,xml文件只需要在创建文件时后缀名加“.xml”即可创建,总计六个文件五个包

  1. src/main/java 目录下创建包 com.example.mybatis.model,并在其中创建 User.java 类。

  2. src/main/java 目录下创建包 com.example.mybatis.mapper,并在其中创建 UserMapper.java 接口。

  3. src/main/java 目录下创建包 com.example.mybatis.service,并在其中创建 UserService.java 类。

  4. src/main/resources 目录下创建 mybatis-config.xml 文件。

  5. src/main/resources/mapper 目录下创建 UserMapper.xml 文件。

  6. src/test/java 目录下创建包 com.example.mybatis.service,并在其中创建 UserServiceTest.java 类。

  7. 创建完成如图

7.src/main/java/com/example/mabatis目录下面的三个Java文件内容如下

package com.example.mybatis.model;public class User {private Integer id;private String username;private Integer age;private String email;// Getters and Setterspublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", age=" + age +", email='" + email + '\'' +'}';}
}
package com.example.mybatis.mapper;import com.example.mybatis.model.User;import java.util.List;public interface UserMapper {// 查询所有用户List<User> getAllUsers();// 根据 ID 查询用户User getUserById(Integer id);// 添加用户void addUser(User user);// 更新用户void updateUser(User user);// 删除用户void deleteUser(Integer id);
}
package com.example.mybatis.service;import com.example.mybatis.mapper.UserMapper;
import com.example.mybatis.model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.Reader;
import java.util.List;public class UserService {private static SqlSessionFactory sqlSessionFactory;static {try {String resource = "mybatis-config.xml";Reader reader = Resources.getResourceAsReader(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {e.printStackTrace();}}public List<User> getAllUsers() {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);return mapper.getAllUsers();}}public User getUserById(int id) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);return mapper.getUserById(id);}}public void addUser(User user) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);mapper.addUser(user);session.commit();}}public void updateUser(User user) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);mapper.updateUser(user);session.commit();}}public void deleteUser(int id) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);mapper.deleteUser(id);session.commit();}}
}

8.两个xml文件内容如下(上面是UserMapper.xml对应内容,下面是mybatis-config.xml对应内容)(记得在password处输入数据库密码)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.mapper.UserMapper"><select id="getAllUsers" resultType="com.example.mybatis.model.User">SELECT * FROM user</select><select id="getUserById" parameterType="int" resultType="com.example.mybatis.model.User">SELECT * FROM user WHERE id = #{id}</select><insert id="addUser" parameterType="com.example.mybatis.model.User">INSERT INTO user (username, age, email) VALUES (#{username}, #{age}, #{email})</insert><update id="updateUser" parameterType="com.example.mybatis.model.User">UPDATE user SET username = #{username}, age = #{age}, email = #{email} WHERE id = #{id}</update><delete id="deleteUser" parameterType="int">DELETE FROM user WHERE id = #{id}</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&amp;serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

9.Test类代码如下

package com.example.mybatis.service;import com.example.mybatis.model.User;
import org.junit.Test;import java.util.List;public class UserServiceTest {private UserService userService = new UserService();@Testpublic void testGetAllUsers() {List<User> users = userService.getAllUsers();for (User user : users) {System.out.println(user);}}@Testpublic void testGetUserById() {User user = userService.getUserById(1);System.out.println(user);}@Testpublic void testAddUser() {User user = new User();user.setUsername("Alice");user.setAge(25);user.setEmail("alice@example.com");userService.addUser(user);}@Testpublic void testUpdateUser() {User user = userService.getUserById(1);user.setUsername("Bob");user.setAge(30);user.setEmail("bob@example.com");userService.updateUser(user);}@Testpublic void testDeleteUser() {userService.deleteUser(1);}
}

10.编译运行Test类代码,大功告成!

11.如何使用

  • 在 IDE 中运行 UserServiceTest 类中的各个测试方法,验证功能是否正常。

  • 每次运行测试方法时,MyBatis 会与数据库交互,执行相应的 CRUD 操作。(增删改查)

12.对于数据库

如果玩坏了Test类,按下列操作重建数据库即可

DROP DATABASE mybatis_demo;(删除现有数据库)

CREATE DATABASE mybatis_demo;(重新创建数据库)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89837.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89837.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89837.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小企业如何搭建本地私有云服务器,并设置内部网络地址提供互联网访问

在数字化时代&#xff0c;很多普通公司小企业规模的&#xff0c;利用本地小型服务器或计算机搭建私有云服务器&#xff0c;不仅可以提升数据管理效率&#xff0c;还能保障业务数据的安全性和灵活性。以下是为小企业量身定制的私有云服务器搭建指南&#xff0c;及最后附无公网IP…

MySQL 八股文【持续更新ing】

MySQL 八股文【持续更新ing】 文章目录 MySQL 八股文【持续更新ing】前言一、MySQL的存储引擎有哪些&#xff1f;他们之间有什么区别&#xff1f;二、MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别&#xff1f;1.InnoDB 中的聚簇索引2.InnoDB 中的非聚簇索引 三、MySQL…

每日算法刷题Day42 7.5:leetcode前缀和3道题,用时2h

7. 3026.最大好子数组和(中等,学习) 3026. 最大好子数组和 - 力扣&#xff08;LeetCode&#xff09; 思想 1.给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个子数组中&#xff0c;第一个元素和最后一个元素 差的绝对值恰好 为 k &#xff0c;我们称这个…

Linux操作系统之文件(四):文件系统(上)

前言&#xff1a; 我们前几篇文章讲了缓冲区与重定向的有关概念&#xff0c;这些设计是linux系统的核心机制&#xff0c;对系统性能、资源管理和用户操作灵活性有重要意义。 不涉及一些硬件就不可能让大家清楚地去理解文件系统&#xff0c;所以这篇文章&#xff0c;我将会从计…

java中,stream的filter和list的removeIf筛选速度比较

在 Java 里&#xff0c;Stream 的filter和 List 的removeIf筛选效率要依据具体情形来判断。 1. 操作本质有别 Stream 的 filter&#xff1a; 它是一种中间操作&#xff0c;不会立刻执行&#xff0c;而是把筛选条件记录下来。只有遇到终端操作时&#xff0c;才会开始处理元素。…

Python(28)Python循环语句指南:从语法糖到CPython字节码的底层探秘

目录 引言一、推导式家族全解析1.1 基础语法对比1.2 性能对比测试 二、CPython实现揭秘2.1 字节码层面的秘密2.2 临时变量机制 三、高级特性实现3.1 嵌套推导式优化3.2 条件表达式处理 四、性能优化指南4.1 内存使用对比4.2 执行时间优化技巧 五、最佳实践建议六、总结&#x1…

深度分析:Microsoft .NET Framework System.Random 的 C++ 复刻实现

深度分析&#xff1a;Microsoft .NET Framework Random 的 C 复刻实现 核心原理与算法结构 本实现基于 Knuth 减随机数生成器&#xff08;Subtractive Random Number Generator&#xff09;&#xff0c;是 .NET Framework 中 System.Random 的精确复刻。其核心特点包括&#x…

[论文阅读] 人工智能 | 在非CUDA硬件上运行几何学习:基于Intel Gaudi-v2 HPU的PyTorch框架移植实践

在非CUDA硬件上运行几何学习&#xff1a;基于Intel Gaudi-v2 HPU的PyTorch框架移植实践 论文标题&#xff1a;PyTorch-based Geometric Learning with Non-CUDA Processing Units: Experiences from Intel Gaudi-v2 HPUs arXiv:2507.01031 (cross-list from cs.LG) PyTorch-ba…

Python-多线程-threading

1 需求 2 接口 3 示例 4 参考资料 Python treading 模块 | 菜鸟教程

2025年- H91-Lc199-- 62.不同路径(多维动态规划)--Java版

1.题目描述 2.思路 dp含义&#xff1a;代表到当前位置的路径数 递推公式&#xff1a;dp[i][j]dp[i-1][j]dp[i][j-1] dp数组初始化&#xff0c;我们要确保第一行和第一列是有值的. dp数组的遍历顺序&#xff1a;我们需要从左往右遍历&#xff0c;从上往下遍历。并且把第一行和第…

char 不是 Java 中的 2 字节(16 位)吗? 为什么用 UTF-8 编码写入时,一个中文要占 3 个字节?

char 不是 Java 中的 2 字节&#xff08;16 位&#xff09;吗&#xff1f; 为什么用 UTF-8 编码写入时&#xff0c;一个中文要占 3 个字节&#xff1f; ✅ 一、Java 中的 char 是什么&#xff1f; Java 的 char 是一个 固定大小的 2 字节&#xff08;16 位&#xff09;类型&am…

【Elasticsearch】检索排序 分页

检索排序 & 分页 1.测试数据准备2.排序功能2.1 简单字段排序2.2 多字段排序2.3 日期排序 3.分页功能3.1 基础分页3.2 深度分页&#xff08;不推荐大数据量使用&#xff09;3.3 使用 search_after 进行高效分页 4.综合示例&#xff1a;高亮排序分页5.实践建议 1.测试数据准备…

Delta、Jackknife、Bootstrap

用班级平均身高的案例&#xff0c;展示 ​Delta、Jackknife、Bootstrap​ 的完整计算过程。 ​0. 数据准备​ ​原始数据&#xff08;4个学生的身高&#xff09;​​&#xff1a; 真实均值&#xff08;目标统计量&#xff09;​​&#xff1a; ​1. Delta 方法&#xff08;公式…

企业智脑技术架构设计:紧贴企业场景规划面向未来的发展趋势与实现路径

摘要 本文深入探讨了企业智脑技术架构的设计理念与发展趋势&#xff0c;分析了当前企业智能化转型的技术需求与挑战&#xff0c;提出了一个面向未来的企业智脑技术架构设计方案。文章从底层技术支撑、核心能力构建、应用场景适配、安全合规保障以及未来发展路径五个维度展开论…

新手向:Python方向讲解

从NASA火星任务到TikTok推荐算法&#xff0c;从自动化脚本到量子计算&#xff0c;Python用import antigravity重新定义了编程边界 一、设计哲学&#xff1a;优雅明确的编程禅学 Python之禅&#xff08;import this&#xff09;&#xff1a; 优美胜于丑陋&#xff08;Beautifu…

Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器

文章目录一、介绍与下载二、使用一、介绍与下载 ModHeader顾名思义就是让我们可以自定义HTTP请求头或者是重写响应头&#xff0c;包括新增请求头/响应头或者覆盖Chrome浏览器设置的请求头的默认值&#xff0c;同时还可以根据URL Pattern来只对特定网站生效。 有条件的同学可以…

SEW:无监督预训练在语音识别中的性能-效率权衡

摘要 本文研究了自动语音识别&#xff08;ASR&#xff09;中预训练模型的性能-效率权衡问题。我们聚焦于 wav2vec 2.0&#xff0c;并形式化了多种影响模型性能和效率的架构设计。基于所有观察结果&#xff0c;我们提出了 SEW&#xff08;Squeezed and Efficient Wav2vec&#…

linux系统部署express+vue项目

一、准备阶段&#xff1a; 1、安装linux上所需要的环境&#xff1a;npm nodejs nginx pm2 //安装 npm&#xff08;Node 包管理器&#xff09; sudo apt install npm//判断是否安装成功 npm -v//安装 Node.js&#xff08;可以根据需要选择版本&#xff09; sudo apt inst…

PixiJS教程(004):点击事件交互

1.6 事件交互实现要求&#xff1a;点击宝剑&#xff0c;修改宝剑的颜色。1️⃣实现代码&#xff1a; // 为精灵添加交互事件 sprite.interactive true; sprite.on(click, () > {// 点击精灵时&#xff0c;改变精灵的颜色sprite.tint Math.random() * 0xFFFFFF; });说明&am…

创客匠人助力家庭教育IP破局:从0到1打造创始人个人品牌全攻略

一、IP定位&#xff1a;细分赛道的精准锚定与用户画像构建 在家庭教育8000亿市场规模的竞争中&#xff0c;创始人IP的差异化定位成为破局关键。创客匠人通过“标签化定位”工具&#xff0c;帮助教育者锁定垂直领域&#xff0c;如亲子沟通、青春期教育等细分赛道。以景丽霞老师…