Cấu Hình Môi Trường Kết Nối MySQL Qua MyBatis

Thiết Lập Dự án Và Phụ Thuộc

Tạo một dự án mới sử dụng Maven trong môi trường phát triển của bạn. Sau khi cấu trúc thư mục được tạo thành công, điều chỉnh tệp pom.xml để khai báo các thư viện cần thiết cho việc kết nối cơ sở dữ liệu.

Thiếu các phần phụ thuộc sau vào vùng <dependencies>:

  • MyBatis: Framework cốt lõi để thao tác ORM.
  • JDBC Driver: Bộ điều khiển tương thích với MySQL.
  • JUnit: Kho kiểm thử tự động.
<!-- Cấu hình định dạng đóng gói -->
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
    
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Kiểm Tra Cấu Hình Nguồn

Trong thư mục tài nguyên (src/main/resources), tạo tệp tên là mybatis-config.xml. Đây là nơi định nghĩa môi trường truy cập và thông tin kết nối đến máy chủ dữ liệu.

Lưu ý rằng cấu hình dưới đây chỉ định rõ kiểu quản lý giao dịch JDBC và sử dụng bộ phân phối (PooledDataSource) để tối ưu hiệu suất.

<?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="devEnv">
        <environment id="devEnv">
            <!-- Quản lý giao dịch thông qua JDBC -->
            <transactionManager type="JDBC"/> 
            <!-- Định nghĩa nguồn dữ liệu kết nối -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" 
                    value="jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="secret_password"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

Xây Dựng Đối Tượng Miền (Domain Object)

Xác định lớp Java sẽ ánh xạ xuống các bảng trong cơ sở dữ liệu. Ví dụ này sử dụng lớp UserEntity để đại diện cho người dùng.

package org.demo.model;

public class UserEntity {
    private int userId;
    private String userName;
    private String accountPassword;
    private String phoneNumber;
    private short roleType;

    public UserEntity() {}

    public UserEntity(int userId, String userName, String accountPassword, 
                      String phoneNumber, short roleType) {
        this.userId = userId;
        this.userName = userName;
        this.accountPassword = accountPassword;
        this.phoneNumber = phoneNumber;
        this.roleType = roleType;
    }

    // Các phương thức getter và setter
    public int getUserId() { return userId; }
    public void setUserId(int userId) { this.userId = userId; }

    public String getUserName() { return userName; }
    public void setUserName(String userName) { this.userName = userName; }

    public String getAccountPassword() { return accountPassword; }
    public void setAccountPassword(String accountPassword) { this.accountPassword = accountPassword; }

    public String getPhoneNumber() { return phoneNumber; }
    public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; }

    public short getRoleType() { return roleType; }
    public void setRoleType(short roleType) { this.roleType = roleType; }
}

Định Nghĩa Lớp Truy Xuất Dữ Liệu (DAO)

Một giao diện Mapper sẽ xác định các phương thức SQL cần thực thi. Tạo giao diện này trong gói org.demo.dao.

package org.demo.dao;

import org.demo.model.UserEntity;

public interface UserMapper {
    /**
     * Chèn một bản ghi người dùng mới
     */
    int addUser(UserEntity user);
}

Đồng thời, tạo tệp XML UserMapper.xml nằm trong thư mục mapper để khai báo chi tiết câu lệnh SQL. Quan trọng nhất là tên miền (namespace) phải khớp chính xác với đường dẫn đầy đủ của giao diện.

<?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="org.demo.dao.UserMapper">
    <!-- ID trùng với tên phương thức trong giao diện -->
    <insert id="addUser" useGeneratedKeys="true" keyProperty="userId">
        INSERT INTO users (user_name, pwd, phone, role) 
        VALUES (#{userName}, #{accountPassword}, #{phoneNumber}, #{roleType})
    </insert>
</mapper>

Kết Hợp映射 Tệp Vào Cấu Trúc Chính

Để MyBatis nhận diện Mapper, cần đăng ký nó vào tệp mybatis-config.xml đã tạo trước đó ở cấp độ thấp nhất của thẻ configuration.

<!-- Phần này đặt cuối cùng bên trong thẻ configuration -->
<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

Chạy Thử Nghiệm Kết Nối

Sử dụng một lớp tiện ích (Test Helper) để khởi tạo SqlSession và thực hiện lệnh chèn. Cách tiếp cận này đảm bảo luồng xử lý tài nguyên đúng chuẩn.

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.Reader;
import java.util.ResourceBundle;

public class ConnectionTest {
    public static void main(String[] args) throws Exception {
        // Đọc cấu hình từ lớp PathResource
        Reader configReader = Resources.getResourceAsReader("mybatis-config.xml");
        
        // Khởi tạo Factory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configReader);
        
        // Mở phiên làm việc, tham số true kích hoạt commit tự động
        try (SqlSession session = factory.openSession(true)) {
            
            // Lấy đối tượng Mapper
            org.demo.dao.UserMapper mapper = session.getMapper(org.demo.dao.UserMapper.class);
            
            // Đối tượng dữ liệu mẫu
            var newUser = new org.demo.model.UserEntity(1, "Admin", "abc", "0123456789", (short)1);
            
            // Thực thi hành động
            int rowsAffected = mapper.addUser(newUser);
            
            System.out.println("Số lượng dòng ảnh hưởng: " + rowsAffected);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Khi chương trình chạy thành công, đầu ra sẽ hiển thị số lượng dòng dữ liệu đã được cập nhật trong bảng cơ sở dữ liệu, chứng tỏ kết nối và mapping đã hoạt động ổn định.

Thẻ: mybatis mysql orm sql-session Maven

Đăng vào ngày 26 tháng 9 lúc 10:06