目录
1.打开idea创建一个Java项目,构建系统选"Maven"
3.配置pom.xml文件,为其添加合适版本的依赖,第二张图是小编本人的pom.xml文件,仅供参考
4.(可选)打开"文件"------"设置",按下图调整设置
6.按下列步骤创建包和文件,xml文件只需要在创建文件时后缀名加".xml"即可创建,总计六个文件五个包
7.src/main/java/com/example/mabatis目录下面的三个Java文件内容如下
8.两个xml文件内容如下(上面是UserMapper.xml对应内容,下面是mybatis-config.xml对应内容)(记得在password处输入数据库密码)
一.概述
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"即可创建,总计六个文件五个包
-
在
src/main/java
目录下创建包com.example.mybatis.model
,并在其中创建User.java
类。 -
在
src/main/java
目录下创建包com.example.mybatis.mapper
,并在其中创建UserMapper.java
接口。 -
在
src/main/java
目录下创建包com.example.mybatis.service
,并在其中创建UserService.java
类。 -
在
src/main/resources
目录下创建mybatis-config.xml
文件。 -
在
src/main/resources/mapper
目录下创建UserMapper.xml
文件。 -
在
src/test/java
目录下创建包com.example.mybatis.service
,并在其中创建UserServiceTest.java
类。 -
创建完成如图
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&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;(重新创建数据库)