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

Spring 整合 MyBatis 完整教程:Maven + MySQL 環境搭建與實戰

     編輯:Java 綜合教學

Spring 整合 MyBatis 完整教程:Maven + MySQL 環境搭建與實戰

MyBatis-Spring 是將 MyBatis 無縫整合到 Spring 容器中的關鍵橋梁。它負責加載 MyBatis 核心工廠類與 Session 類,支援將 Mapper 接口與 SqlSession 自動注入到業務層 Bean 中,並統一處理事務與異常轉換(將 MyBatis 異常轉為 Spring 的 DataAccessException),最終實現業務代碼對特定框架的零依賴。

一、 使用 Maven 創建標準 Web 項目

為了確保 Spring 4.x 與 MyBatis 3.x 整合順利,首先回顧在 Maven 環境下創建 Web 項目的標準流程。完成後的項目結構如下圖所示:

項目結構圖

1.1 創建 Maven 項目

在 IDE 中選擇 File → New → Other → Maven Project,勾選 Create a simple project(不使用模板),打包方式設為 war。

新建 Maven 項目 簡單項目選項 填寫坐標與打包類型

1.2 調整項目 Facet 版本

專案創建後可能報錯,右鍵項目 → Properties → Project Facets,將 Java 版本從 1.5 改為 1.7。

修改 Java 版本

1.3 配置 Dynamic Web Module

先取消勾選 Dynamic Web Module 使其暫時變為非 Web 項目,再重新勾選並設定版本為 3.0,點擊 Further Configuration available... 生成 web.xml。

取消 Dynamic Web Module 設置版本 3.0 生成 web.xml

1.4 整理目錄結構

將生成的 WebContent/META-INF 與 WEB-INF 複製到 src/main/webapp,刪除 WebContent 目錄,並在 Deployment Assembly 中移除不需部署的路徑(如 src/test/java、src/test/resources、WebContent),新增 src/main/webapp 作為部署根目錄。

複製目錄 刪除 WebContent 調整 Deployment Assembly 添加部署路徑 選擇 src/main/webapp

1.5 添加測試頁面與 Server Runtime

在 src/main/webapp 下新建 index.jsp,若報錯提示缺少 JavaEE Server Runtime,右鍵項目 → Properties → Java Build Path → Add Library → Server Runtime 選擇 Tomcat 7.0。

新建 index.jsp 添加 Server Runtime 選擇 Tomcat 7.0

1.6 運行驗證

右鍵項目 → Run As → Run on Server,瀏覽器顯示 "Hello World!" 及當前時間即表示環境搭建成功。

運行結果

二、 使用 MyBatis 獨立訪問 MySQL

2.1 添加 Maven 依賴

在 pom.xml 中引入 MyBatis、MySQL 驅動、Log4j2、JUnit 等核心依賴。建議使用 MySQL Connector/J 5.1.x 版本(MyBatis 3 不支援 6.x)。

<dependencies>
  <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency>
  <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.6.1</version></dependency>
  <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency>
  <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version></dependency>
</dependencies>

搜索依賴 依賴引入結果

2.2 準備數據庫表

創建 booktypes 表並插入測試數據:

CREATE TABLE `booktypes` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '類型編號',
  `typeName` varchar(100) NOT NULL COMMENT '類型名稱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

建表腳本

2.3 實體類與映射接口

// 實體類 BookType
public class BookType {
    private int id;
    private String typeName;
    // getter/setter 省略
}

// Mapper 接口
public interface BookTypeDAO {
    List<BookType> getAllBookTypes();
}

2.4 Mapper XML 與 MyBatis 核心配置

<!-- BookTypeMapper.xml -->
<mapper namespace="com.zhangguo.Spring61.mapping.BookTypeDAO">
  <select id="getAllBookTypes" resultType="BookType">
    select id, typeName from booktypes
  </select>
</mapper>

<!-- MyBatisCfg.xml -->
<configuration>
  <properties resource="db.properties"/>
  <typeAliases><package name="com.zhangguo.Spring61.entities"/></typeAliases>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers><mapper resource="com/zhangguo/Spring61/mapping/BookTypeMapper.xml"/></mappers>
</configuration>

2.5 工具類與實現類

封裝 MyBatisUtil 管理 SqlSessionFactory 與 SqlSession,實現 BookTypeDAOImpl 調用 Mapper 完成查詢。

2.6 JUnit 測試與 Log4j2 配置

編寫測試用例驗證查詢功能,並在 src 根目錄添加 log4j2.xml 消除日誌警告。

<Configuration status="off" monitorInterval="1800">
  <Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders>
  <Loggers><Root level="debug"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

測試通過 Log4j2 運行狀態

三、 Spring 4.x 整合 MyBatis 3.x(初級版)

引入 mybatis-spring 適配器,在 Spring 容器中統一管理數據源、SqlSessionFactory 與 Mapper Bean,消除硬編碼。

3.1 更新 pom.xml

<properties><spring.version>4.3.0.RELEASE</spring.version></properties>
<dependencies>
  <!-- 原有依賴保留 -->
  <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency>
  <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency>
  <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency>
  <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.9</version></dependency>
</dependencies>

3.2 Spring 配置文件 ApplicationContext.xml

<beans ...>
  <!-- 1. 數據源 -->
  <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/db2"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
  </bean>

  <!-- 2. SqlSessionFactory -->
  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="jdbcDataSource"/>
    <property name="configLocation" value="classpath:MyBatisCfg.xml"/>
  </bean>

  <!-- 3. Mapper 接口代理 -->
  <bean id="bookTypeDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.zhangguo.swd.mapping.BookTypeDAO"/>
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
  </bean>

  <context:component-scan base-package="com.zhangguo"/>
  <aop:aspectj-autoproxy proxy-target-class="true"/>
</beans>

3.3 整合測試

@Test
public void test01() {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
    BookTypeDAO dao = ctx.getBean("bookTypeDao", BookTypeDAO.class);
    List<BookType> list = dao.getAllBookTypes();
    list.forEach(System.out::println);
    assertNotNull(list);
}

整合測試通過

小結:此階段完成基礎整合,後續可移除 MyBatisCfg.xml 中的環境配置,改用 Spring 提供的數據源(或引入 C3P0、Druid 等連接池)。

精簡 MyBatisCfg.xml

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