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

Spring 與 MyBatis 整合實戰與逆向工程應用指南

     編輯:Java 相關知識

Spring 與 MyBatis 整合核心思路

在企業級 Java 開發中,Spring 負責統一管理業務層與持久層組件,而 MyBatis 則提供靈活的 SQL 映射能力。兩者整合的關鍵在於:

  • 由 Spring 容器以單例模式管理 SqlSessionFactory
  • 整合包自動生成 Mapper 代理對象,利用 SqlSessionFactory 建立 SqlSession
  • 所有持久層 Mapper 介面均交由 Spring 容器生命週期管理

環境準備與專案結構

建議採用標準 Maven 專案結構,核心依賴包括:

  • MyBatis 3.2.7+
  • Spring Framework 3.2.0+
  • MyBatis-Spring 整合包(由 MyBatis 官方維護)
  • 資料庫連接池(如 DBCP)與 JDBC 驅動

核心配置:SqlSessionFactory 與資料源

在 applicationContext.xml 中配置資料源與 SqlSessionFactoryBean:

<context:property-placeholder location="classpath:db.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="maxActive" value="10" />
    <property name="maxIdle" value="5" />
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="mybatis/SqlMapConfig.xml" />
    <property name="dataSource" ref="dataSource" />
</bean>

傳統 DAO 開發模式(整合後)

DAO 實作類繼承 SqlSessionDaoSupport,透過 Spring 注入 SqlSessionFactory:

<bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

Mapper 代理開發模式(推薦)

使用 MapperFactoryBean 逐一定義代理對象雖然可行,但維護成本高。建議採用 MapperScannerConfigurer 掃描包路徑自動註冊:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="cn.itcast.ssm.mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

注意:使用 sqlSessionFactoryBeanName 而非 sqlSessionFactory,確保資料源與屬性檔優先載入。

MyBatis 逆向工程:從資料庫生成代碼

官方提供的 MyBatis Generator 可針對單表自動生成 PO、Mapper 介面與 XML 映射檔,極大提升開發效率。

Generator 配置檔關鍵點

<generatorConfiguration>
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/mybatis"
            userId="root" password="mysql">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <javaModelGenerator targetPackage="cn.itcast.ssm.po" targetProject=".\src">
            <property name="enableSubPackages" value="false" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper" targetProject=".\src">
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.itcast.ssm.mapper" targetProject=".\src">
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <table tableName="items"/>
        <table tableName="orders"/>
        <table tableName="orderdetail"/>
        <table tableName="user"/>
    </context>
</generatorConfiguration>

生成代碼的使用

將生成的代碼複製至專案對應包路徑,即可直接使用 Mapper 介面提供的 CRUD 方法,例如:

// 條件查詢
ItemsExample example = new ItemsExample();
example.createCriteria().andNameEqualTo("筆記本3");
List<Items> list = itemsMapper.selectByExample(example);

// 主鍵查詢
Items item = itemsMapper.selectByPrimaryKey(1);

// 新增
Items newItem = new Items();
newItem.setName("手機");
newItem.setPrice(999f);
itemsMapper.insert(newItem);

// 更新(全欄位)
Items updateItem = itemsMapper.selectByPrimaryKey(1);
updateItem.setName("水杯");
itemsMapper.updateByPrimaryKey(updateItem);

總結

Spring 整合 MyBatis 透過統一管理 SqlSessionFactory 與 Mapper 掃描,實現了依賴注入與聲明式事務的無縫銜接。搭配逆向工程,可快速完成基礎持久層代碼生成,讓開發者專注於業務邏輯與複雜 SQL 優化。

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