SSM進階(四)Spring整合Mybatis-----Aop事務
Spring整合Mybatis-----Aop事務
首先對於Spring整合Mybatis有兩種方式那就是使用sql絕對定位以及使用Mapper代理來進行開發,本篇博文先來介紹第一種。
所謂的Sql絕對定位就是namespace+id得方式來進行定位;
首先對於Mybatis得介紹後面會有博文詳細介紹,簡單的說Mybatis得核心配置檔案完成得就兩個功能,一就是資料來源得設定,而就是實體得註冊(mapper層對映得註冊);
接下來就開始建立專案:
1首先建立Maven專案,匯入依賴
需要得包有Mybatis核心包,Spring,Mysql,log4j,dbcp
此外還需要generator.xml,log4j.properties得兩個資原始檔,前著是用自動生成pojo,mapper,Dao層得一個外掛,後者主要是用來產生日誌得;
建好了專案以後則通過這個外掛來生成相應得類和檔案,但是在此處我們不生產Dao及其介面,一步一步來,否則一下生成了我們也就不用幹什麼了,而且這樣分開寫便於理解,最主要得原因就是,底層完成得操做是增刪改查,但是查是不需要事務的,所以這樣我們可以提前對查進行測試;
不生成Dao介面及其實現類,只需要將這裡的Dao介面生成的位置刪除即可;
2.接下來我們就來建立Dao及其實現類
首先編寫Dao介面,裡面喜喪基本的增刪改查,
注意的地方就是:方法名要和自動生成的Mapper檔案的id一致,而其引數也要一致這樣才能通過namespace+id來絕對定位到sql語句上,從而操作資料庫;
再就是編寫其實現類,但是這裡為例方便操作,就不用以前的QuerruRunner了,這裡Dao介面的實現類,再來繼承一個類就是SqlsessionDaosupport,因為這個類會提供Sqlsession這個物件,但前提是我們要進行注入;
分析:小編通過原始碼得是SqlsessionDaosupport這個類得內部是:
this.sqlsession=newsqlsessionTemplate(sqlsessionFactory)
所以在注入得時候,我們應該注入得就是工廠,根據注入得工廠來得到sqlsesion物件。
那麼sqlsession這個物件有什麼用呢?
我們看一個新增使用者得底層程式碼:
@Override
public void insert(User user) {
this.getSqlSession().insert("com.qf.mapper.UserMapper.insert",user);
}
很顯然,程式碼得簡潔性一目瞭然,對於使用者得田間一句話搞定;
那麼我們來解釋一下這條語句:
1)首先因為我們注入了SqlsessionFactory,SqlsessionDaosupport這個類得內部對他進行了賦值,所以我們可以通過getSqlSession()來得到這個物件,在呼叫增刪改查得方法;
2)com.qf.mapper.UserMapper.insert這就花就是我們所謂得nameSpace+id通過這條語句我們就可以來定位到,生成得mapper對映檔案中得某個具體id方法,從而對資料庫進行操作;
再接下來對刪,改查的方法進行重寫即可;
@Override
public void deleteByPrimaryKey(Long id) {
this.getSqlSession().delete("com.qf.mapper.UserMapper.insert.deleteByPrimaryKey",id);
}
@Override
public void updateByPrimaryKey(User user) {
this.getSqlSession().update("com.qf.mapper.UserMapper.insert.updateByPrimaryKey",user);
}
@Override
public User selectByPrimaryKey(Long id) {
User user=this.getSqlSession().selectOne("com.qf.mapper.UserMapper.insert.selectByPrimaryKey",id);
return user;
}
通過以上的操所我們以及完成了Dad層的建立
3 整合持久層
1) 首先我們要做的就是資料來源的配置,
這個大家都比較熟悉了,再這裡就不過多的贅述,就是url Driver username password 著寫資料
2) 我們來建立sqlsession物件,
同時為其關聯資料來源依據前面提到的注入;
因為第層的增刪改都是通過sqlsession來實現的所以得到的Sqlsession物件應該關聯資料庫;
下面就是具體的程式碼
建立Sqlsession物件
<bean id="SqlSessionFactoryBean"class="org.mybatis.spring.SqlSessionFactoryBean">
關聯資料來源
<property name="dataSource"value="datasource"></property>
註冊實體相當於mybatis當中的註冊對映
<propertyname="mapperLocations" >
<array>
<value>com/qf/mapper/UserMapper.xml</value>
</array>
</property>
</bean>
此處工廠用到的就是: SqlSessionFactoryBean
3)接下來我們就應該船艦UserDao物件
<bean name="UserDao"class="com.qf.Dao.UserDaoImpl">
在這裡我們就對sqlsession物件進行了注入
<propertyname="sqlSessionFactory" value="SqlSessionFactoryBean"></property>
</bean>
Value就來自於之前建立的sqlsession物件的id
這樣我們就完成了初次的整合,之後進行查詢的測試即可;編寫測試類
@Test
public void testselectByPrimaryKey(){
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao=(UserDao) context.getBean("UserDao");
user user=userDao.selectByPrimaryKey(5L);
System.out.println(user.getUsername()+"--"+user.getPassword());
context.close();
}
@Test這個宣告是junit當中的測試註解,使用這個註解就可以對單個的方法進行測試而步驟使用main函式
以上就是對查詢的測試。
4.Aop事務的整合
首先來編寫服務層及其實現類
因為以後的資料都是從View層過來的,所以才這裡我們需要額外船艦Dto層,來建立和玉面保持一致的實體類,因為有些資料使用者是不會提交的需要我們自己設定,從而方便資料庫的管理。
編寫好服務層及其實現類之後,我們就對其進行配置以及Aop程式設計;
1)首先來說一下ServiceImpl實現類的寫法:
因為服務層接受的是頁面傳過來的引數,所以可能會有Dto型別,這是就牽扯到一個數據搬移的問題,我們有兩種方法來解決這個問題:
一個就是建立一個底層引數的物件,用get方法將Dto的值得到
再用set方法將這個值植入剛剛建好的物件中;
第二個就是使用BeanUtils.copypropertise(a,b)這個方法就是將a種的的資料複製到b中,但是它有一個使用的前提就是二者的型別是一致的;
廢話不多說看一段程式碼就明白了:
@Override
public void updataUser(UserDto dto) {
User user=new User();
BeanUtils.copyProperties(dto,user);
userDao.updateByPrimaryKey(user);
}
2)就是我們應該再配置檔案當中注入UserDao這樣這兒才能使用userdao來呼叫底層的方法;
3)接下倆我們就來整合
ii)首先建立目標類物件,也就是服務層物件,程式碼如下:
<bean id="UserService"class="com.qf.service.UserServiceImpl">
再此處對UserServiceImpl該類當中的userDao屬性來注入
<property name="userDao"value="UserDao"></property>
</bean>
III)船艦事務管理物件
因為事務是直接由Spring框架類提供的所以我們只需建立事務管理類的物件程式碼如下:
<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource" value="dataSource"></property>
</bean>
Class用到的就是DataSourceTransactionManager這個管理類。從而產生物件
再這個物件的內部 關聯資料來源因為事務也是可以操作資料庫的比如說時間等。
Iv)定義事務通知切面,讓事務應用到具體的方法,程式碼如下:
<tx:advice id="advice" transaction-manager="transactionManager">
讓具體的方法加事務:add,del,update加事務,find不加
<tx:attributes>
<tx:method name="add*"propagation="REQUIRED"/>
<tx:method name="del*"propagation="REQUIRED"/>
<tx:method name="updata*"propagation="REQUIRED"/>
<tx:method name="find*"read-only="true"></tx:method>
</tx:attributes>
</tx:advice>
Find設定為只讀;*好表示以前面的名稱開頭的方法,當然事務時應用到服務層的方法,所以指的就是服務層目標類的方法;
v)最後就是Aop程式設計
程式碼如下:
<aop:config>
建立切入點,用到的就是execution表示式即切入點表示式:
<aop:pointcut id="mypoint"expression="execution(* com.qf.service.*.*(..))"></aop:pointcut>
形成切面advice-ref關聯公共類,pointcut-ref關聯切點所以將通知和切入點關聯就形成了切面
<aop:advisor advice-ref="advice"pointcut-ref="mypoint"></aop:advisor>
</aop:config>
vi)最後就是對服務層編寫好的方法程序測試,程式碼如下:
@Test
public void testInsert(){
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService) context.getBean("UserService");
UserDto user1=new UserDto();
user1.setUsername("傅筱");
user1.setPassword("123456");
userService.addUser(user1);
}
@Test
public void test(){
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService) context.getBean("UserService");
UserDto user1=new UserDto();
user1.setId(15L);
user1.setUsername("傅筱");
user1.setPassword("1111");
userService.updateUser(user1);
}
在這只是測試了兩個,其餘讀者自測。
相關推薦
SSM進階(四)Spring整合Mybatis-----Aop事務
Spring整合Mybatis-----Aop事務 首先對於Spring整合Mybatis有兩種方式那就是使用sql絕對定位以及使用Mapper代理來進行開發,本篇博文先來介紹第一種。 所謂的Sql絕對定位就是namespace+id得方式來進行定位
MongoDB進階(八)Spring整合MongoDB(Spring Data MongoDB)
最近比較忙,忙的都沒空理csdn了,今天我繼續邁著魔鬼般的步伐,摩擦摩擦……總結下最近學到的MongoDB的知識。 1.認識Spring Data MongoDB 之前還的確不知道Spring連整合Nosql的東西都實現了,還以為自己又要
springboot-web進階(四)——單元測試
context ice 通過 contex png www. throws .com 基礎知識 一、概述 基礎知識,參考:https://www.cnblogs.com/ysw-go/p/5447056.html 二、springboot的單元測試 1.入門測
CSS進階(四)margin
off clas gin 提升 list div 保持 tom 觸發 margin 元素尺寸:border-box DOM屬性裏的offsetWidth 和offsetHeight 元素內部尺寸: padding-box DOM屬性裏的clientWidth 和 clie
SpringCloud從入門到進階(四)——使用SpringBoot搭建微服務
wid web api 進入 con cloud val 讀取 pat ase 內容 SpringBoot整合SpringCloud的Eureka、Zuul等組件,快速實現簡單易懂且具有服務熔斷、負載均衡的分布式架構1.0,體驗微服務的魅力。 版本 IDE:IDEA
Jdbc進階(四)
***************************資料庫的隔離級別**************************** mysql 資料庫 這4種隔離級別都支援 預設的隔離級別 可重複讀 oracle 只支援 讀已提交、序列化 預設的隔離級別是 讀已提交 一.讀未提交 會出現髒
SpringCloud從入門到進階(四)——生產環境下Eureka的完全分布式部署
分開 -s rip linux mas 此外 實例名 leo 版本 內容 由於前兩節的內容我們知道,開啟了preferIpAddress後,Eureka的偽分布式部署會提示replica不可用。這一節我們講解如何在生產環境下部署完全分布式的Eureka集群,確保開啟了p
SpringCloud從入門到進階(四)——生產環境下Eureka的完全分散式部署
內容 由於前兩節的內容我們知道,開啟了preferIpAddress後,Eureka的偽分散式部署會提示replica不可用。這一節我們講解如何在生產環境下部署完全分散式的Eureka叢集,確保開啟了preferIpAddress後replica的可用性。 版本 IDE:IDEA 2017.2.
JavaScript進階(四)form表單校驗
前言 本章將學習表單的校驗,作為一個前面學習的總結! 方法 1.概念 我們知道,在學習HTML的時候,我們做了一個非常醜陋的表單,裡面有文字框、單選鈕、複選框等一系列表單元素。這些都是隨便填寫的,沒有加任何的校驗。也就是說正常情況下我們需
Android進階(四):Activity啟動過程(最詳細&最簡單)
1.前言 最近一直在看 《Android進階解密》 的一本書,這本書編寫邏輯、流程都非常好,而且很容易看懂,非常推薦大家去看看(沒有收廣告費,單純覺得作者寫的很好)。 上一篇簡單的介紹了Android進階(三):Application啟動過程(最詳細&最簡單)
DataBinding進階(四)
自定義屬性: Databinding提供了@BindingAdapter(“屬性名”)註解來完成自定義屬性。 如果要繫結多個屬性,屬性之間用英文的逗號隔開,例如@BindingAdapter(“bind:image” , “bind:test” ) 在JavaBean中定義
maven 專案(四) spring整合springMVC開發統一接入API(準備工作:第二部分)
介面虛擬碼流程(為啥是虛擬碼,這裡就是很一般的寫法,給人蔘考吧):/** @Controller:宣告是springMVC的響應元件 @RequestMapping(value = "/apicenter"):定義介面路徑 */ @Controller public class Api
前端進階(四)React和Redux
React和Redux是相互獨立的兩個框架。 一、React React 是一個採用宣告式,高效而且靈活的用來構建使用者介面的框架。具體參考React中文。 React解決的問題(或者說React的優勢)是: (1)通過給予程式設計師一個虛擬DOM供其渲染,這樣就
ActiveMQ學習(四)Spring整合ActiveMQ
因為2018年的第一場雪,比以往時候來的更晚一些,所以,本篇文章隔了近5個月才更新,抱歉來的有點晚了各位,不是人造革,皮是真的皮,啊彌陀佛,罪過罪過……本篇,將繼續跟隨以往的腳步,使用Spring MVC+ActiveMQ+Maven+Tomcat,做一個
Dagger2 進階 (四)
組織Component Component之間的關係有 依賴(dependencies),包含(SubComponent),繼承方式(extends)。我們在一個專案之中不可能只使用一個Component聯結器來注入物件完成注入工作,一般除了一個全域性的App
Android進階(四):Activity啟動過程(最詳細&最簡單)
1.前言 最近一直在看 《Android進階解密》 的一本書,這本書編寫邏輯、流程都非常好,而
Spring Boot 2.x(四):整合Mybatis的四種方式
前言 目前的大環境下,使用Mybatis作為持久層框架還是佔了絕大多數的,下面我們來說一下使用Mybatis的幾種姿勢。 姿勢一:
Mybatis學習(六)————— Spring整合mybatis
一、Spring整合mybatis思路 非常簡單,這裡先回顧一下mybatis最基礎的根基, mybatis,有兩個配置檔案 全域性配置檔案SqlMapConfig.xml(配置資料來源,全域性變數,載入對映檔案等東西) 對映檔案xxxM
mybatis(7)---spring整合mybatis進行自動生成程式碼
1、引入mybatis的generator包 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-
springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
首先我們要知道Hibernate五大物件:,本例項通過深入的使用這五大物件和spring+springMVC相互結合,體會到框架的好處,提高我們的開發效率 Hibernate有五大核心介面,分別是:Session Transaction