程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Mybatis學習--spring和Mybatis整合,mybatis--spring

Mybatis學習--spring和Mybatis整合,mybatis--spring

編輯:JAVA綜合教程

Mybatis學習--spring和Mybatis整合,mybatis--spring


  • 簡介

  在前面寫測試代碼的時候,不管是基於原始dao還是Mapper接口開發都有許多的重復代碼,將spring和mybatis整合可以減少這個重復代碼,通過spring的模板方法模式,將這些重復的代碼進行封裝,如:獲取SqlSessionFactory、SqlSession、SqlSession的關閉等,我們只需要實現具體的業務處理。另外,spring還利用其IOC將Dao或者Mapper接口的放入到容器中進行管理,更好的實現了解耦。

  • Spring和MyBatis整合

  1、整合思路:

  需要spring通過單例方式管理SqlSessionFactory。spring和mybatis整合生成代理對象,使用SqlSessionFactory創建SqlSession。(spring和mybatis整合自動完成)持久層的mapper都需要由spring進行管理。

  2、整合環境

 

  創建一個新的java工程,將Mybatis和Spring整合的jar包導入到工程中。

  3、sqlSessionFactory

 

  在applicationContext.xml配置sqlSessionFactory和數據源:

 

 1 <!-- 加載配置文件 -->
 2     <context:property-placeholder location="classpath:db.properties" />
 3 
 4     <!-- 數據源,使用dbcp -->
 5     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
 6         destroy-method="close">
 7         <property name="driverClassName" value="${jdbc.driver}" />
 8         <property name="url" value="${jdbc.url}" />
 9         <property name="username" value="${jdbc.username}" />
10         <property name="password" value="${jdbc.password}" />
11         <property name="maxActive" value="10" />
12         <property name="maxIdle" value="5" />
13     </bean>
14 
15 
16     <!-- sqlSessinFactory -->
17     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
18         <!-- 加載mybatis的配置文件 -->
19         <property name="configLocation" value="mybatis/SqlMapConfig.xml" />
20         <!-- 數據源 -->
21         <property name="dataSource" ref="dataSource" />
22 </bean>

 

  • 原始Dao開發

  1、其他都基本相同,就是Dao的實現類有所變化:

1 public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
2     @Override
3     public User findUserById(int id) throws Exception {
4         SqlSession sqlSession = this.getSqlSession();//獲取sqlSession
5         User user = sqlSession.selectOne("user.findUserById", id);
6         return user;
7     }
8 }

  實現類繼承SqlSessionDaoSupport,這樣spring就通過模板方法將 獲取sqlSessionFactory、獲取sqlSession、事務管理、關閉sqlSession進行了封裝,我們只需要負責業務邏輯即可。

  2、配置dao

  在applicationContext.xml中配置dao。

 

1 <!-- 配置userDaoImpl -->
2     <bean id="userDao" class="com.luchao.mybatis.first.daoimpl.UserDaoImpl">
3         <property name="sqlSessionFactory" ref="sqlSessionFactory" />
4     </bean>

 

  3、測試程序

 1 public class MyBatis_mapper_test {
 2     private ApplicationContext applicationContext;
 3     @Before
 4     public void init() throws IOException {
 5         this.applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
 6     }
 7     @Test
 8     public void testFindUserById() throws Exception {
 9         // 創建UserMapper對象
10         UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
11         // 調用userMapper的方法
12         User user = userMapper.findUserById(10);
13         // 打印客戶信息
14         System.out.println(user);
15     }
16 }
  • Mapper代理開發

  1、在Spring中配置Mapper接口

  (1)、使用org.mybatis.spring.mapper.MapperFactoryBean,根據mapper接口生成代理對象

1 <bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
2     <property name="mapperInterface" value="mapper接口地址"/>
3   <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
4 </bean>

  需要針對每個mapper進行配置,比較麻煩。

  (2)、通過MapperScannerConfigurer進行mapper掃描

 

1 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
2  <property name="basePackage" value="mapper接口包地址"></property>
3 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
4 </bean>

 

  basePackage:掃描包路徑,中間可以用逗號或分號分隔定義多個包。

  這種方式mapper.xml的文件名和mapper的接口名稱保持一致,且放在同一個目錄。如果將mapper.xml和mapper接口的名稱保持一致且放在一個目錄 則不用在sqlMapConfig.xml中進行配置。

  可以看出將Mybatis整合到Spring中,可以減少模板代碼的書寫,並且將Dao和Mapper通過配置放入到Spring容器中,可以實現代碼解耦。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved