日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解

發布時間:2025/3/21 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于springhibernate處于不同的層次,Spring關心的是業務邏輯之間的組合關系,Spring提供了對他們的強大的管理能力,?而Hibernate完成了OR的映射,使開發人員不用再去關心SQL語句,直接與對象打交道。?將Hibernate做完映射之后的對象交給Spring來管理是再合適不過的事情了,?Spring也同時提供了對HibernateSessionFactory的集成功能。所以spring+hibernate整合對我們實際開發是非常有必要的。Spring整合hibernate有多種方式,我用的只是其中的一種,我這種不需要hibernate的配置文件,直接配置我們的beans.xml里了。下面我們具體來看一下:

首先我們先把需要的實體類定義出來,我這里定義的是:


[java]?view plaincopy print?
  • <span?style="font-size:18px;">Users.java:??
  • public?class?Users?{??
  • private?int?id;??
  • private?String?name;??
  • public?int?getId()?{??
  • return?id;??
  • }??
  • public?void?setId(int?id)?{??
  • this.id?=?id;??
  • }??
  • public?String?getName()?{??
  • return?name;??
  • }??
  • public?void?setName(String?name)?{??
  • this.name?=?name;??
  • }??
  • }</span>??


  • ? ? ? ?這里我們整合spring+hibernate主要是來整合的細節,業務邏輯和分層在此就忽略不計了,我直接把所有的東西都寫在了test類里面了。

    下面我們來看一下我們的beans.xml的配置,我們先把代碼貼出來,然后再下面一點點的深入詳解:

    Beans.xml

    [html]?view plaincopy print?
  • <span?style="font-size:18px;color:#008080;"><?xml?version="1.0"?encoding="UTF-8"?>??
  • <beans?xmlns="http://www.springframework.org/schema/beans"??
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"??
  • xmlns:tx="http://www.springframework.org/schema/tx"??
  • xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-2.5.xsd??
  • http://www.springframework.org/schema/tx???
  • ???????????http://www.springframework.org/schema/tx/spring-tx-2.5.xsd??
  • "></span>??
  • [html]?view plaincopy print?
  • <span?style="font-size:18px;color:#008080;">//配置數據庫相關信息,配置數據源,它將會被注入到sessionfactory中??
  • <bean?id="dataSource"?class="org.apache.commons.dbcp.BasicDataSource"??
  • destroy-method="close">??
  • <propertynamepropertyname="driverClassName"?value="com.microsoft.sqlserver.jdbc.SQLServerDriver"?/>??
  • <property?name="url"??
  • value="jdbc:sqlserver://localhost:1433;?DatabaseName=test"?/>??
  • <property?name="username"?value="sa"></property>??
  • <property?name="password"?value="123456"></property>??
  • </bean>??
  • //構建sessionfactory的bean,為把sessionfactory注入到dao層構建bean??
  • <bean?id="sessionFactory"??
  • class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"??
  • lazy-init="false">??
  • //注入datasource,給sessionfactoryBean內setdatasource提供數據源??
  • <property?name="dataSource">??
  • <ref?bean="dataSource"?/>??
  • </property>??
  • //加載實體類的配置文件??
  • <property?name="mappingResources">??
  • <list>??
  • <value>com/bzu/test/Users.hbm.xml</value>??
  • <value>com/bzu/test/Log.hbm.xml</value>??
  • </list>??
  • </property>??
  • //設置hibernate的屬性,相當于hibernate.cfg.xml中的設置屬性??
  • <property?name="hibernateProperties">??
  • <props>??
  • <prop?key="hibernate.dialect">??
  • org.hibernate.dialect.SQLServerDialect??
  • </prop>??
  • <prop?key="hbm2ddl.auto">update</prop>??
  • <prop?key="hibernate.show_sql">true</prop>??
  • </props>??
  • </property>??
  • </bean>??
  • //把sessionfactory注入dao層??
  • <bean?id="test"?class="com.bzu.test.test"?lazy-init="false">??
  • <property?name="sessionFactory"?ref="sessionFactory"></property>??
  • </bean>??
  • </beans></span>??


  • 通過上面的注釋我想大家應該大體對這個配置文件明白些了吧。其實這個也很好理解,大體思路就是首先寫一個datasourcebean,這個bean主要是為hibernate提供數據源,大家肯定可以想到這個數據源將會被注入到sessionfactory里面,因為構建sessionfactory肯定會需要到這個數據源的信息。

    下一步我們在寫一個sessionfactorybean,這個bean將被我們用在注入到dao層,進行數據庫操作,當然,他還需要一些屬性進行注入,比如我們剛才寫的datasource,除了這個之外我們還需要配置我們的實體,spring給我們提供了hbm文件和實體類等多種配置方法。Hbm文件配置我們這樣寫:

    [html]?view plaincopy print?
  • <span?style="font-size:18px;color:#008080;"><property?name="mappingResources">??
  • <list>??
  • <value>com/bzu/test/Users.hbm.xml</value>??
  • <value>com/bzu/test/Log.hbm.xml</value>??
  • </list>??
  • </property></span>??


  • 屬性值為mappingResources,這個屬性值是一個list,我們可以配置他的value,把我們的配置文件一個個的加入進來。如果你沒有寫配置文件,而是以注解的方式配置的實體類,你當然也可以以實體類的形式加到這里來:你可以以下方式進行配置:把屬性的name設置成annotatedClasses

    [html]?view plaincopy print?
  • <span?style="font-size:18px;"><property?name="annotatedClasses">??
  • <list>??
  • <value>com.bzu.model.User</value>??
  • <value>com.bzu.model.Log</value>??
  • </list>??
  • </property></span>??


  • ??????說完配置sessionfactory的的實體,下一步我們還要配置hibernate的的一些屬性,比如創建數據庫表的方式、數據庫方言等。設置hibernate的屬性,我們用hibernateProperties來配置,配置方式,上面代碼已經很清楚的寫到了,在這就不贅述了。

    好了,配置完sessionfactory這個bean,下一步我們就要把sessionfactory注入到我們的dao層進行數據庫操作了。這一步就比較簡單了,相信大家能看懂上面的代碼。

    看完配置文件,接下來我們就要來測試一下來,試試能不能用hibernate對我們的數據庫進行訪問了。具體來看一下代碼:

    [java]?view plaincopy print?
  • <span?style="font-size:18px;color:#7f0055;">package?com.bzu.test;??
  • import?org.hibernate.Session;??
  • import?org.hibernate.SessionFactory;??
  • import?org.springframework.context.support.ClassPathXmlApplicationContext;??
  • import?org.springframework.transaction.annotation.Transactional;??
  • public?class?test?{??
  • private?static?SessionFactory?sessionFactory;??
  • public?SessionFactory?getSessionFactory()?{??
  • return?sessionFactory;??
  • }??
  • public?void?setSessionFactory(SessionFactory?sessionFactory)?{??
  • this.sessionFactory?=?sessionFactory;??
  • }??
  • public?static?void?main(String[]?args)?throws?Exception?{??
  • ClassPathXmlApplicationContext?ctx?=?new?ClassPathXmlApplicationContext(??
  • "beans.xml");??
  • Session?session?=?sessionFactory.openSession();??
  • //?((SessionFactory)?ctx.getBean("sessionFactory")).openSession();??
  • Users?user?=?new?Users();??
  • user.setName("nihao");??
  • session.save(user);??
  • }??
  • }</span>??


  • ???大家可以清楚的看到,上面的內容很簡單,我們寫具體的架構的東西,直接把sessionfactory注入到了test類了,當然了,我們實際開發應用中不會手動的去加載beans.xml的,這里主要是為了測試,測試一下:

    打印出sql語句:

    Hibernate:?insert?into?users?(name)?values?(?)

    好了,基本上我們這個hibernate+spring整合的差不多了。但在調試這個程序的時候還是出了點小差錯,最后弄了半天才發現錯誤所在,我剛開始寫的時候,是把main里面的操作都抽出一個方法了,然后再main方法中我是這樣調用的new?Test().sava(user),直接就出事了。異常的原因就是我new出來的test的對象就不受spring容器管理了,所以在調用save方法時根本sessionfactory就沒有被注入進去,所以希望大家注意這一點。


    from:?http://blog.csdn.net/csh624366188/article/details/7659764

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。