Bootstrap

MyBatis学习指南

目录

一、MyBatis简介

1.1 什么是MyBatis

1.2 MyBatis的优点

二、MyBatis的基本使用

2.1 项目结构

2.2 配置文件

2.2.1 pom.xml

2.2.2 mybatis-config.xml

2.3 创建实体类

2.4 创建Mapper接口

2.5 创建Mapper XML文件

2.6 创建Service类

2.7 创建主类

三、运行和测试

四、总结


MyBatis 是一款优秀的持久层框架,它使得Java程序员能够通过简单的XML或注解配置,将Java对象与数据库中的记录进行映射。相较于Hibernate等ORM框架,MyBatis提供了更大的灵活性和更少的配置工作。本文将详细介绍MyBatis的基础知识和使用方法,适合有一定Java基础的程序员。

一、MyBatis简介

1.1 什么是MyBatis

MyBatis 是一个支持定制化 SQL、存储过程以及高级映射的持久层框架。它消除了几乎所有的JDBC代码以及手动设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射数据库中的关系,直接将数据转换为Java对象。

1.2 MyBatis的优点

  • 灵活性高:相比于其他ORM框架,MyBatis允许你直接编写SQL语句,灵活性更高。
  • 简化了JDBC操作:通过XML或注解配置,MyBatis减少了大量的JDBC代码。
  • 动态SQL:支持动态SQL语句,可以根据不同的条件生成不同的SQL语句。
  • 缓存机制:提供了一级缓存和二级缓存机制,提高了查询效率。

二、MyBatis的基本使用

2.1 项目结构

我们首先搭建一个简单的Maven项目,结构如下:

mybatis-demo
│── src
│   └── main
│       ├── java
│       │   └── com.example.mybatisdemo
│       │       ├── entity
│       │       │   └── User.java
│       │       ├── mapper
│       │       │   └── UserMapper.java
│       │       ├── service
│       │       │   └── UserService.java
│       │       └── App.java
│       └── resources
│           ├── mybatis-config.xml
│           └── mapper
│               └── UserMapper.xml
└── pom.xml

2.2 配置文件

2.2.1 pom.xml

pom.xml中添加MyBatis的依赖:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
    <!-- 其他依赖 -->
</dependencies>
2.2.2 mybatis-config.xml

配置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/mybatis_demo"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

2.3 创建实体类

com.example.mybatisdemo.entity包下创建User类:

package com.example.mybatisdemo.entity;

public class User {
    private Integer id;
    private String name;
    private String email;

    // getters and setters
}

2.4 创建Mapper接口

com.example.mybatisdemo.mapper包下创建UserMapper接口:

package com.example.mybatisdemo.mapper;

import com.example.mybatisdemo.entity.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User findById(Integer id);

    @Select("SELECT * FROM users")
    List<User> findAll();
}

2.5 创建Mapper XML文件

src/main/resources/mapper目录下创建UserMapper.xml

<?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.mybatisdemo.mapper.UserMapper">
    <select id="findById" parameterType="int" resultType="com.example.mybatisdemo.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <select id="findAll" resultType="com.example.mybatisdemo.entity.User">
        SELECT * FROM users
    </select>
</mapper>

2.6 创建Service类

com.example.mybatisdemo.service包下创建UserService类:

package com.example.mybatisdemo.service;

import com.example.mybatisdemo.entity.User;
import com.example.mybatisdemo.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserService {
    private SqlSessionFactory sqlSessionFactory;

    public UserService(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public User findById(Integer id) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            return mapper.findById(id);
        }
    }

    public List<User> findAll() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            return mapper.findAll();
        }
    }
}

2.7 创建主类

com.example.mybatisdemo包下创建App

package com.example.mybatisdemo;

import com.example.mybatisdemo.entity.User;
import com.example.mybatisdemo.service.UserService;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class App {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            UserService userService = new UserService(sqlSessionFactory);

            // Fetch all users
            List<User> users = userService.findAll();
            for (User user : users) {
                System.out.println(user);
            }

            // Fetch user by id
            User user = userService.findById(1);
            System.out.println(user);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、运行和测试

确保数据库和表已经创建:

CREATE DATABASE mybatis_demo;

USE mybatis_demo;

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(50)
);

INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');
INSERT INTO users (name, email) VALUES ('Jane Doe', '[email protected]');

运行App类,检查控制台输出,验证MyBatis是否正确配置和工作。

四、总结

通过本文,讲解了MyBatis的基础知识和基本使用方法。MyBatis作为一个灵活的持久层框架,在实际项目中能够极大地提高开发效率和代码可维护性。掌握了这些基础知识后,可以进一步学习MyBatis的高级特性,如动态SQL、高级映射和缓存机制等。

;