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

IntelliJ IDEA 整合 MyBatis 連線 MySQL 完整教學

     編輯:Java 相關知識

專案結構概覽

mybatis-demo
├─ src
│  ├─ main
│  │  ├─ java
│  │  │  └─ com.fanyafeng
│  │  │     ├─ dao          # Mapper 介面
│  │  │     ├─ model        # 實體類別與對應 XML
│  │  │     └─ test         # 測試類別
│  │  └─ resources
│  │     ├─ Configuration.xml   # MyBatis 核心設定
│  │     ├─ log4j.properties    # 日誌設定
│  │     └─ com/fanyafeng/model/User.xml  # SQL Mapping
│  └─ test
└─ pom.xml

核心檔案詳解

1. 實體類別 User.java

package com.fanyafeng.model;

import java.util.Date;

public class User {
    private int id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    // Getter/Setter/toString 略
}

2. Mapper 介面 IUserDao.java

package com.fanyafeng.dao;

import com.fanyafeng.model.User;
import java.util.List;

public interface IUserDao {
    List<User> queryUserByName(String name);
    User selectUserById(int id);
    void add(User user);
    void del(int id);
    void alter(int id);
}

3. SQL Mapping User.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.fanyafeng.dao.IUserDao">

  <select id="selectUserById" parameterType="int" resultType="com.fanyafeng.model.User">
    SELECT * FROM user WHERE id = #{id}
  </select>

  <select id="queryUserByName" parameterType="String" resultType="com.fanyafeng.model.User">
    SELECT * FROM user WHERE username LIKE #{name}
  </select>

  <insert id="add" parameterType="com.fanyafeng.model.User">
    INSERT INTO user (id, username, birthday, sex, address)
    VALUES (#{id}, #{username}, #{birthday}, #{sex}, #{address})
  </insert>

</mapper>

注意:建議將 User.xml 放在 resources 目錄下對應套件路徑,而非 model 目錄,避免 Maven 編譯時未複製 XML 檔案。

4. MyBatis 核心設定 Configuration.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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/fanyafeng/model/User.xml"/>
  </mappers>
</configuration>

5. 測試類別 UserTest.java

package com.fanyafeng.test;

import com.fanyafeng.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.Reader;
import java.util.Date;
import java.util.List;

public class UserTest {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            Reader reader = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            // 查詢單筆
            // User user = sqlSession.selectOne("com.fanyafeng.dao.IUserDao.selectUserById", 2);

            // 模糊查詢
            List<User> userList = sqlSession.selectList("com.fanyafeng.dao.IUserDao.queryUserByName", "%李寧%");
            userList.forEach(System.out::println);

            // 新增
            User user = new User();
            user.setId(100);
            user.setUsername("李寧");
            user.setSex("女");
            user.setAddress("家裡蹲");
            user.setBirthday(new Date());
            int rows = sqlSession.insert("com.fanyafeng.dao.IUserDao.add", user);
            sqlSession.commit(); // 別忘了提交!
            System.out.println("新增筆數:" + rows);
        } finally {
            sqlSession.close();
        }
    }
}

Maven 關鍵設定:確保 XML 被複製到 target

在 pom.xml 的 <build> 區塊加入 <resources>:

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.xml</include>
        <include>**/*.properties</include>
      </includes>
    </resource>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>
  </resources>
</build>

這樣 mvn compile 才會把 src/main/java 下的 *.xml 複製到 target/classes,避免 Resource not found 錯誤。

常見坑點總結

  • XML 路徑錯誤:Configuration.xml 中 mapper resource 必須與 target/classes 實際路徑一致。
  • MySQL 驅動版本:MySQL 8.0+ 需用 com.mysql.cj.jdbc.Driver 並加 useSSL=false&serverTimezone=UTC。
  • Log4j 衝突:範例同時引入 slf4j-log4j12 與 log4j-api/log4j-core 易產生綁定衝突,建議統一用 Log4j 2.x。

總結

本文從專案結構、核心程式碼、Maven 設定完整示範 IntelliJ IDEA 整合 MyBatis 連線 MySQL。掌握 SqlSessionFactory 建立、Mapper 介面對應、事務提交與資源複製設定,即可快速上手 MyBatis 開發。

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