目录
一.概述
二.特点
三.组件
四.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”即可创建,总计六个文件五个包
-
在
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文件内容如下
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&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;(重新创建数据库)