Java学习第十五部分——MyBatis

目录

一.概述

二.特点

三.组件

四.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文件,仅供参考

java 复制代码
        <!-- 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>
java 复制代码
<?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.在数据库中输入以下代码并运行

sql 复制代码
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文件内容如下

java 复制代码
package com.example.mybatis.model;

public class User {
    private Integer id;
    private String username;
    private Integer age;
    private String email;

    // Getters and Setters
    public 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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
}
java 复制代码
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);
}
java 复制代码
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处输入数据库密码)

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.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>
java 复制代码
<?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/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类代码如下

java 复制代码
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();

    @Test
    public void testGetAllUsers() {
        List<User> users = userService.getAllUsers();
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test
    public void testGetUserById() {
        User user = userService.getUserById(1);
        System.out.println(user);
    }

    @Test
    public void testAddUser() {
        User user = new User();
        user.setUsername("Alice");
        user.setAge(25);
        user.setEmail("alice@example.com");
        userService.addUser(user);
    }

    @Test
    public void testUpdateUser() {
        User user = userService.getUserById(1);
        user.setUsername("Bob");
        user.setAge(30);
        user.setEmail("bob@example.com");
        userService.updateUser(user);
    }

    @Test
    public void testDeleteUser() {
        userService.deleteUser(1);
    }
}

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

11.如何使用

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

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

12.对于数据库

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

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

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

相关推荐
pianmian11 小时前
类(JavaBean类)和对象
java
我叫小白菜2 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
天水幼麟2 小时前
动手学深度学习-学习笔记(总)
笔记·深度学习·学习
Albert Edison2 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍3 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122463 小时前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~3 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇3 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097623 小时前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄4 小时前
设计模式之访问者模式
java·设计模式·访问者模式