相關鏈接:
eclipse中SSH三大框架環境搭建<一>
eclipse中SSH三大框架環境搭建<二>
引言:通過上兩篇文章我們已經可以掌握struts2和spring的環境的搭建以及簡單使用,但是在訪問數據庫層面使用的是傳統的JDBC。在我們項目開發中使用JDBC確實是不太理想的,所以今天我給大家來講解一下目前行業中比較流行的持久層框架——hibernate。
第1步:我們依舊需要引入hibernate的jar包
找到hibernate解壓好的文件目錄,在該目錄下的lib目錄下有一個required目錄,將該目錄下的所有jar包引入到我們項目的lib目錄下。
第2步:我們又要和配置文件打交道了,首先我們要配置一個在src目錄下的一個實體映射文件entityname.hbm.xml。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="entity.BookCard" table="BookCard"> 7 <id name="cid" column="cid"></id> 8 <property name="name" column="name" type="string" length="50" not-null="true"></property> 9 <property name="sex" column="sex"></property> 10 <property name="cardDate" column="cardDate"></property> 11 <property name="deposit" column="deposit"></property> 12 </class> 13 </hibernate-mapping>
解析:1>頭信息就不多說了,首先寫好一個hibernate-mapping首尾標記,在標記內映射我們相對應的實體類。
2>在class標記的name屬性的值對應我們的實體類(全路徑),table屬性對應我們在數據庫的表名
3>id標記為我們數據庫的主鍵配置相關信息,同理name屬性中的屬性值為我們實體類對象的屬性,column為數據庫對應表的字段。
4>property標記中type屬性為該屬性對應的java數據類型,length為數據庫中指定長度這里相當於varchar(50),not-null屬性為指定該字段是否可以為空,默認可以為空。
第3步:依舊是寫配置文件,配置連接數據庫相關信息的hibernate.cfg.xml文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 6 <hibernate-configuration> 7 <session-factory name="foo"> 8 <!-- 配置mySql連接參數 --> 9 <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 10 <property name="connection.pool_size">5</property> 11 <property name="show_sql">true</property> 12 <property name="format_sql">true</property> 13 <property name="hbm2ddl.auto">update</property> 14 15 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 16 <property name="connection.url">jdbc:mysql://localhost:3306/CardDB</property> 17 <property name="connection.username">root</property> 18 <property name="connection.password">123456</property> 19 20 <mapping resource="BookCard.hbm.xml"/> 21 </session-factory> 22 23 </hibernate-configuration>
解析:1>配置一個hibernate-configuration首尾標記,在其內部插入session-factory首尾標記。
2>在property標記中name屬性中指定dialect屬性值配置數據庫方言(數據庫不同以及版本不同方言也不同,查閱相關資料可知)
3>在property標記中name屬性中指定connection.pool屬性值配置連接池大小(依據訪問頻率配置)
4>在property標記中name屬性中指定show_sql屬性值配置是否顯示sql語句在控制台(開發過程中建議為true,易於調試)
5>在property標記中name屬性中指定format_sql屬性值配置sql語句是否需要格式化(廢話,當然要)
* 6>在property標記中name屬性中指定hbm2ddl.auto屬性值配置創表信息。值為update時,若數據庫沒有我們實體對應的表將自動為我們創建,若存在則會更新我的表。 值為create時,每次執行時會先查找數據庫是否存在這張表存在即先刪除在創建,不存在即直接創建。
7>連接數據庫的驅動以及制定數據庫URL,用戶名和密碼相信大家都懂,我就不一一介紹了。
* 8>我們的這份文件還需映射一個資源便是我們的實體映射文件,在mapping標記中指定。
第4步:配置完以上文件才是我們hibernate真正為我們服務的時候了,編寫我們的dao來操作數據庫了。

1 public class BookCardDaoImpl implements BookCardDao { 2 3 @Override 4 public List<BookCard> getAllCardInfo() { 5 //sessionFactory這個實例可以自己按常規的hibernate傳統寫法創建(不建議) 6 //可以交給spring去托管 7 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 8 Session session = sessionFactory.openSession(); 9 //后面當使用JPA的時候,EntityManager 類似於 Session 10 Query query = session.createQuery("from BookCard"); 11 12 //這2行代碼,后期會交給spring的AOP幫忙處理 13 List<BookCard> list = query.getResultList(); 14 15 session.close(); 16 sessionFactory.close(); 17 return list; 18 } 19 }
解析:通過上面的代碼我們可以明顯看出hibernate的實用性,我們的程序員再也不用寫獲取連接,獲取sql語句的執行對象等等,以及在代碼中我們都不需要關心該項目使用的是哪一個數據庫了,如此一來大大提高了我們的工作效率。
頁面中的數據已經成功顯示
控制台中執行的hibernate的sql語句也正常顯示出來了。