目錄
一.概述
二.特點
三.組件
四.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;(重新創建數據庫)