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

Spring 整合 MyBatis 完整指南:SqlSessionFactory 配置、原始 DAO 與 Mapper 掃描代理

     編輯:Java 綜合教學

Spring 整合 MyBatis 完整指南

透過 Spring 管理 SqlSessionFactory、封裝樣板程式碼(獲取/關閉 Session、事務),並將 DAO/Mapper 注入容器實現解耦。

1. 整合思路

  • Spring 以單例管理 SqlSessionFactory。
  • 整合包自動生成 Mapper 代理物件,使用 SqlSessionFactory 建立 SqlSession。
  • 持久層 Mapper 介面交由 Spring 容器管理。

2. 環境準備

建立 Java 專案,匯入 MyBatis、Spring、資料庫驅動、DBCP 等 JAR。

3. 核心配置 applicationContext.xml

<!-- 載入屬性檔 -->
<context:property-placeholder location="classpath:db.properties" />

<!-- DBCP 資料源 -->
<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>

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

4. 原始 DAO 開發模式

實作類別繼承 SqlSessionDaoSupport,Spring 自動注入 sqlSessionFactory:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
    @Override
    public User findUserById(int id) throws Exception {
        SqlSession sqlSession = getSqlSession(); // 模板方法獲取
        return sqlSession.selectOne("user.findUserById", id);
    }
}

配置:

<bean id="userDao" class="com.example.dao.UserDaoImpl">
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

5. Mapper 代理開發模式(推薦)

方式一:單獨配置 MapperFactoryBean

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.example.mapper.UserMapper" />
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

方式二:掃描器自動註冊 MapperScannerConfigurer(推薦)

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

約定:Mapper 介面與 XML 同名、同目錄,可省略 SqlMapConfig.xml 手動配置。

6. 測試程式

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/applicationContext.xml")
public class MyBatisSpringTest {
    @Autowired private UserMapper userMapper;

    @Test
    public void testFindUserById() {
        User user = userMapper.findUserById(10);
        System.out.println(user);
    }
}

優勢總結

  • 消除重複的 Session 管理、異常處理、事務控制程式碼。
  • DAO/Mapper 由 Spring 容器統一生命週期,便於 AOP 切面增強(如事務)。
  • Mapper 掃描模式零配置新增介面,開發效率大幅提升。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved