sping整合hibernate之二:dao層開發

来源:http://www.cnblogs.com/liaohai/archive/2017/02/20/6419686.html
-Advertisement-
Play Games

在上一篇日誌中將hibernate的會話工廠sessionFactory註入到了spring的容器中,但這樣還不夠,因為hibernate的增刪改查是要使用事務機制的, 所以還要在spring中配置事務管理,將hibernate管理事物的權利交給spring,這樣,在代碼中就無需手動管理事務了。 1 ...


 在上一篇日誌中將hibernate的會話工廠sessionFactory註入到了spring的容器中,但這樣還不夠,因為hibernate的增刪改查是要使用事務機制的, 所以還要在spring中配置事務管理,將hibernate管理事物的權利交給spring,這樣,在代碼中就無需手動管理事務了。 1.首先在spring中配置一個hibernate的jdbc //applicationContext.xml(spring配置文件) 當然,在此之前要將實體類映射文件配置在sessionFactory <!-- 配置hibernateTemplate 相當於jdbc  -->   <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">     <property name="sessionFactory"   ref="sessionFactory"></property>  <!-- 註入sessionFactory -->  </bean>
2.配置事務管理 <!-- spring事務管理 -->   <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">        <property name="dataSource" ref="dataSource" />        <property name="sessionFactory" ref="sessionFactory" />   </bean>  
  <!-- 為增刪改查的方法聲明事務,我這裡把事務放到dao上的,應該放在service比較好 -->  <aop:config>      <aop:pointcut id="txServices" expression="execution(* com.scitc.ssh.dao..*.*(..))"/>      <aop:advisor advice-ref="txAdvice" pointcut-ref="txServices"/>  </aop:config>
 <tx:advice id="txAdvice" transaction-manager="transactionManager">   <tx:attributes>    <tx:method name="add*" propagation="REQUIRED"/>    <tx:method name="insert*" propagation="REQUIRED"/>    <tx:method name="update*" propagation="REQUIRED"/>    <tx:method name="delete*" propagation="REQUIRED"/>    <tx:method name="create*" propagation="REQUIRED"/>    <tx:method name="find*" propagation="REQUIRED"/>   </tx:attributes>  </tx:advice>
3.註入dao層的類   <!-- 註入dao層需要用hibernateTemplate的類 -->    <bean id="BaseDao" class="com.scitc.ssh.dao.BaseDao">     <!-- 為此類註入一個屬性,這樣在類中就可以獲取到這個對象 -->       <!-- 功能:HibernateTemplate hibernateTemplate = new HibernateTemplate()  -->     <property name="hibernateTemplate" ref="hibernateTemplate"></property>      </bean>
4.將事務和數據源,sessionFactory,jdbc,dao層註入這些弄好了之後,就可以寫dao層了  

完整的sping配置文件applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 7        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
 8        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
 9        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
10        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
11 
12     
13     <!-- 此對象用來讀取資料庫配置文件jdbc.properties
14     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
15           <property name="location">  
16               <value>/WEB-INF/jdbc.properties</value>
17           </property>  
18     </bean> -->
19     
20     <!-- 配置數據源(這裡是使用spring預設的數據源,後面會換成c3p0) -->
21     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
22         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
23         <property name="url" value="jdbc:mysql://localhost:3306/ssh"></property>
24         <property name="username" value="root"></property>
25         <property name="password" value="123456"></property>
26     </bean>
27 
28     <!-- 配置hibernate的會話工廠sessionFactory-->
29     <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
30         <property name="dataSource" ref="dataSource"></property>  <!-- 數據源採用上面的 -->
31         <property name="mappingResources">  <!-- 自動掃描model包下的實體類 -->
32             <list>
33                 <value>/com/scitc/ssh/model/User.hbm.xml</value>   
34             </list>
35         </property>
36         <property name="hibernateProperties">
37             <props>
38                 <prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
39                 <!--  <prop key="hibernate.current_session_context_class">thread</prop>-->
40                 <prop key="hibernate.show_sql">true</prop>
41                 <prop key="hibernate.format_sql">true</prop>
42                 <prop key="hibernate.hbm2ddl.auto">update</prop>
43             </props>
44         </property>
45     </bean>     
46     
47     <!-- 配置hibernateTemplate 相當於jdbc  -->
48     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
49         <property name="sessionFactory" ref="sessionFactory"></property>  <!-- 註入sessionFactory -->
50     </bean>
51     
52     <!-- spring事務管理 -->
53     <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
54        <property name="dataSource" ref="dataSource" />  
55        <property name="sessionFactory" ref="sessionFactory" />
56     </bean>  
57     
58     <!-- 開啟spring的註解 -->
59     <context:annotation-config />  <!-- 可以不要這個,下麵的掃描包可以自動開啟註解 -->
60     
61     <!-- 自動掃描services層和dao層的註解 -->
62     <context:component-scan base-package="com.scitc.ssh.services" />
63     <context:component-scan base-package="com.scitc.ssh.services.impl" />
64     <context:component-scan base-package="com.scitc.ssh.dao" />
65     <context:component-scan base-package="com.scitc.ssh.dao.impl" />
66     
67     <!-- 聲明事務 -->
68     <aop:config>
69         <aop:pointcut id="txServices" expression="execution(* com.scitc.ssh.dao..*.*(..))"/>
70         <aop:advisor advice-ref="txAdvice" pointcut-ref="txServices"/>
71     </aop:config>
72     
73     <tx:advice id="txAdvice" transaction-manager="transactionManager">
74         <tx:attributes>
75             <tx:method name="add*" propagation="REQUIRED"/>
76             <tx:method name="insert*" propagation="REQUIRED"/>
77             <tx:method name="update*" propagation="REQUIRED"/>
78             <tx:method name="delete*" propagation="REQUIRED"/>
79             <tx:method name="create*" propagation="REQUIRED"/>
80             <tx:method name="find*" propagation="REQUIRED"/>
81         </tx:attributes>
82     </tx:advice>
83     
84     <!-- 註入dao層需要用hibernateTemplate的類 -->
85     <bean id="BaseDao" class="com.scitc.ssh.dao.BaseDao">
86         <!-- 為此類註入一個屬性,這樣在類中就可以獲取到這個對象 -->
87         <!-- 功能:HibernateTemplate hibernateTemplate = new HibernateTemplate()  -->
88         <property name="hibernateTemplate" ref="hibernateTemplate"></property>  
89     </bean>
90   
91 </beans>

 

   
//數據訪問層通用類basedao.java
 1 package com.scitc.ssh.dao;
 2 
 3 
 4 import java.util.List;
 5 
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.context.ApplicationContext;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 import org.springframework.orm.hibernate4.HibernateTemplate;
10 
11 
12 import com.scitc.ssh.model.User;
13 
14 //數據訪問層通用類
15 public class BaseDao {
16     
17     //@Autowired可以自動獲取spring創建的對象
18     @Autowired private HibernateTemplate hibernateTemplate; //這裡的屬性名一定要和配置中的屬性名一致
19     
20     //返回hibernateTemplate方法 
21     public HibernateTemplate getHibernateTemplate(){
22         return this.hibernateTemplate; 
23     }
24 
25     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
26         this.hibernateTemplate = hibernateTemplate;
27     }
28     
29     //添加
30     public boolean add(Object entity){
31         this.hibernateTemplate.save(entity);   //hibernateTemplate.save(entity)保存
32         return true;
33     }
34     
35     //刪除
36     public boolean delete(Object entity){
37         this.hibernateTemplate.delete(entity);
38         return true;
39     }
40     
41     //查詢全部
42     @SuppressWarnings("unchecked")
43     public List<Object> findAll(String queryString){
44         return (List<Object>) this.hibernateTemplate.find(queryString);
45         
46     }
47     
48     //修改
49     public boolean update(Object entity){
50         this.hibernateTemplate.update(entity);
51         return true;
52         
53     }
54     
55 //    //按參數查詢
56 //    public List<Object> findAll(String queryString, Object[] args){
57 //        List<Object> list = new ArrayList<Object>();
58 //        this.hibernateTemplate.find(queryString);
59 //        return list;
60 //    }
61     
62     public static void main(String[] args) {
63         User user = new User();
64         user.setU_id(1);
65         user.setU_name("社會你海哥");
66         //啟動spring
67         ApplicationContext applicationContexts = new ClassPathXmlApplicationContext("applicationContext.xml");
68         //獲取Ioc容器中的對象
69         BaseDao baseDao = applicationContexts.getBean("BaseDao", BaseDao.class);
70 //        baseDao.add(user);
71         baseDao.update(user);
72 //        User user2 = (User) baseDao.findAll("from User").get(0);
73 //        baseDao.delete(user);
74 //        System.out.println(user2.getU_name());
75         
76     }
77     
78 }

 


 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //(32bit,x86環境,vs2010) struct test { char m1; unsigned int m2; char m3; double m4; char m5; }; 對其執行sizeof(test),得到值為32,並且我們對裡面每個變數取sizeof,確實是所屬類型的大小,但 ...
  • 迭代器 在python中,迭代器協議就是實現對象的__iter()方法和next()方法,其中前者返回對象本身,後者返回容器的下一個元素。實現了這兩個方法的對象就是可迭代對象。迭代器是有惰性的,只有在使用時才會產生,這就為處理大量數據提供了好處,不同一次性把所有數據寫入記憶體。下麵自己寫了一個迭代器, ...
  • 直接上代碼,主要函數 ...
  • 最近深感自己技術深度不足,又有點急功近利的感覺。作為一個開發者還是要沉澱啊。準備好好鞋墊博客了。希望對自己和博友都有幫助吧。 ...
  • IoC,控制反轉,是spring的核心,通俗點講就是我們不必再自己去用new創建對象了,通過l配置將類註入到IoC容器中,在啟動時,IoC容器去幫我們創建對象,並管理其依賴關係,這種實現方式叫做DI,依賴註入。為什麼我們要用IoC去幫我們管理對象呢,因為通常一個業務邏輯都是由多個對象合作完成工作的, ...
  • 白駒過隙,寒假已經餘額不足,回頭想想,也就是看了兩本書,做了幾個並不大的工程,看著QQ群裡面一些大神們聊天,時不時有的沒的還插幾句,一句話沒人理也是正常事情。有時候還幫同是菜鳥的網友解決問題,好不尷尬!在大神們的隻言片語中,也汲取出來一點對行業的認識,數電、模電和信號處理這幾門課沒有系統的學習沒有學 ...
  • 1.要求 1)輸入用戶名密碼 2)認證成功後顯示歡迎信息 3)輸錯三次後鎖定2.需求分析 1)用戶信息存儲在文件中(login/config/user_login.txt) 2)用戶輸入用戶名和密碼 3)判斷用戶名是否存在,存在則繼續,不存在則提示繼續輸入 4)判斷輸入的用戶名是否已經被鎖定,如果已... ...
  • 最近在做一個swing小項目,其中需要把存儲在硬碟中的圖片文件顯示出來,總結瞭如下方法: 1. Graphics g = getGraphics();String name = "E:/CapabilityModel/out.gif";Image img = Toolkit.getDefaultTo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...