首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java + MyBatis + MySQL 開發環境搭建全流程詳解

     編輯:Java 相關知識

專案初始化與依賴管理

使用 Maven 管理依賴,核心坐標如下(版本可依專案需求升級):

<properties>
    <mybatis.version>3.5.13</mybatis.version>
    <mysql.version>8.0.33</mysql.version>
    <slf4j.version>2.0.9</slf4j.version>
</properties>

<dependencies>
    <!-- MyBatis 核心 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>

    <!-- MySQL 驅動 -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>${mysql.version}</version>
    </dependency>

    <!-- 日誌綁定 (SLF4J + Log4j2 推薦) -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j2-impl</artifactId>
        <version>2.23.1</version>
    </dependency>
</dependencies>

MyBatis 核心配置文件 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 類型別名,簡寫 resultType -->
    <typeAliases>
        <typeAlias alias="User" type="com.example.model.User"/>
    </typeAliases>

    <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="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 映射器註冊 -->
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

資料庫初始化腳本

CREATE DATABASE IF NOT EXISTS `mybatis_demo` DEFAULT CHARACTER SET utf8mb4;
USE `mybatis_demo`;

CREATE TABLE `user` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(50) NOT NULL,
    `age` INT,
    `address` VARCHAR(200)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `user` (`name`, `age`, `address`) VALUES ('Alice', 25, 'Hangzhou');

實體類 User.java

package com.example.model;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String address;

    // 無參構造器(MyBatis 反射實例化必須)
    public User() {}

    // 全參構造器(方便測試)
    public User(Integer id, String name, Integer age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }
    // Getter/Setter 省略
}

映射文件 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectById" parameterType="int" resultType="User">
        SELECT * FROM `user` WHERE id = #{id}
    </select>
</mapper>

測試類:基礎 SqlSession 用法

package com.example.test;

import com.example.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 org.junit.jupiter.api.*;

import java.io.Reader;

import static org.junit.jupiter.api.Assertions.*;

class MyBatisBasicTest {
    private static SqlSessionFactory sqlSessionFactory;

    @BeforeAll
    static void init() throws Exception {
        try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }
    }

    @Test
    void queryTest() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            User user = session.selectOne("com.example.mapper.UserMapper.selectById", 1);
            assertNotNull(user);
            assertEquals("Alice", user.getName());
        }
    }
}

進階:介面式映射(Mapper 接口)

1. 定義接口

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User selectById(int id);
}

2. 映射文件 namespace 對應接口全限定名

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectById" parameterType="int" resultType="User">
        SELECT * FROM `user` WHERE id = #{id}
    </select>
</mapper>

3. 測試介面調用

@Test
void interfaceTest() {
    try (SqlSession session = sqlSessionFactory.openSession()) {
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.selectById(1);
        assertEquals("Alice", user.getName());
    }
}

替代方案:註解式 SQL(無 XML)

package com.example.mapper;

import com.example.model.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapperAnnotated {
    @Select("SELECT * FROM `user` WHERE id = #{id}")
    User selectById(int id);
}

配置中註冊:<mapper class="com.example.mapper.UserMapperAnnotated"/> 或 sqlSessionFactory.getConfiguration().addMapper(UserMapperAnnotated.class);

常見坑點提示

  • 無參構造器缺失:實體類若只有帶參構造器,MyBatis 反射實例化會拋 NoSuchMethodException。
  • 驅動類名:MySQL 8.x 用 com.mysql.cj.jdbc.Driver,舊版為 com.mysql.jdbc.Driver。
  • 時區/SSL:URL 建議加 useSSL=false&serverTimezone=UTC 避免警告。
  • 連接池:生產環境請替換為 HikariCP / Druid,POOLED 僅供測試。

結語

完成上述步驟,一個可運行的 Java + MyBatis + MySQL 開發環境即告搭建完成。後續可引入 Spring/MyBatis-Spring 實現聲明式事務、依賴注入等企業級特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved