一、hibernate簡單了解:
⑴、hibernate一個java領域裡面的一個持久化的ORM框架。
持久化:就是對對象的數據修改,hibernate會把修改的數據同步到數據庫中。
ORM:Object Relation Mapping 對象關系映射。把數據庫中的表映射成java中的一個個對象(POJO),然後hibernate通過對對象的操作來對表進行操作。
⑵、hibernate是對數據數據庫的進一步的封裝,hibernate的底層還是JDBC。
二、hibernate搭建:
在之前,我們已經搭建好了struts2和spring的環境,現在在這二者的基礎之上對數據庫進行進一步的封裝,也就是在項目中加入hibernate。
⑴、首先,下載hibernate 下載地址:http://hibernate.org/orm/ ,下載完解壓後:hibernate-release-5.2.2.Final—>>lib—>>required,找到這個目錄中的所有jar包復制到項目中即可。同時在同級目錄中有其他的jar可以適當的了解,比如:optional目錄中有c3p0的jar,後面數據庫連接池需要使用到。
⑵、編寫hibernate.cfg.xml文件:
①、在你的項目src目錄下添加一個hibernate.cfg.xml文件,文件名可以任意,但需是XXX.cfg.xml類型。
②、聲明dtd:(根據你下載的版本來確定dtd。)
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
③、具體編寫hibernate.configuration
<hibernate-configuration>
<!--設置sessionFactory--> <session-factory> <!-- 配置相關的數據庫基本信息 --> <!-- 數據庫驅動 --> <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <!-- 數據庫訪問路徑 --> <property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName = webLastExam_20160727</property> <!-- 登錄用戶名 --> <property name="connection.username">sa</property> <!-- 登錄密碼 --> <property name="connection.password">password</property> <!-- 配置hibernate的基本信息 --> <!-- 配置hibernate使用的數據庫方言 --> <property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<!-- 設置數據庫連接池的大小 --> <property name="connection.pool_size">5</property>
<!-- 執行操作時候是否在控制台打印sql語句 --> <property name="show_sql">true</property> <!-- 是否進行格式化sql語句,指的是在控制台中輸出的sql語句是否換行 --> <property name="format_sql">true</property> <!--生成數據表的策略--> <property name="hbm2ddl.auto">update</property> <!-- 設置hibernate的映射文件 --> <mapping resource="entity/BookCard.hbm.xml"/>
</session-factory> </hibernate-configuration>
·這裡配置的session-Factory中的數據庫信息本來實在util.MyConnectionImp中定義的,如果在util.MyConnectionImp定義好數據的信息,那麼用戶的數據庫一切換就要修改這裡的代碼,所以需要把這個獲取連接的事情交給hibernate去管理,這樣就避免了直接修改代碼,只要修改配置文件即可。
·這裡需要設置的屬性有:
數據庫驅動、數據庫訪問路徑、用戶名、密碼、數據庫方言、連接池大小、hibernate的映射文件(後面會講)等。
其中 <property name="hbm2ddl.auto">update</property> 這個屬性如果設置為create,那麼之前的數據庫中的數據在電腦開機之後刪除。
⑶、編寫hibernate的映射文件- entityName.hbm.xml :
①、聲明dtd:根據你下載的版本來確定dtd。)
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
②、編寫hibernate-mapping
<hibernate-mapping> <class name="entity_name" table="tabel_name"> <id name="entity_prop_name" type="integer" > <column name="column_name"></column> <generator class="native" /> </id> <property name="entity_prop_name" type="string"> <column name="column_name"></column> </property> </class> </hibernate-mapping>
·其中,class標簽中的name屬性值對應需要映射的實體類的名字,並且是 "包名.類名" 形式。table屬性則是需要通過映射這個實體類到數據庫中的表名。
·其次,id標簽設置的是數據庫表中的主鍵,name屬性對應實體類中需要做主鍵的成員變量名,type屬性是這個成員變量的數據類型,而且這個類型是hibernate映射類型,具體參考映射對照表,column標簽中的name顧名思義就是表中的名字了。generator標簽中的class屬性設置為native,則是為根據不同的底層數據庫采用不同的主鍵生成方式。由於Hibernate會根據底層數據庫采用不同的映射方式,因此便於程序移植,項目中如果用到多個數據庫時,可以使用這種方式。
⑷、在dao中進行sessionFactory的最後配置:
①、獲取SessionFactory
一種是手動new出一個Configuration抽象工廠,然後用這個抽象工工廠創建SessionFactory。這種需要hibernate的XXX.cfg.xml配置,也就是現在我們講的這種。另外一種是使用spring的bean來new一個SessionFactory,然後注入到dao定義的成員變量SessionFactory中。現在我們先演示第一種:
Ⅰ、獲取SessionFactory:如果下面的configure()方法不傳入參數那麼就默認是hibernate.cfg.xml文件。
<!--獲取SessionFactory--> SessionFactory sessionFactory = new Configuration().configure("mySQLHibernate.cfg.xml").buildSessionFactory(); <!--獲取Session對象--> Session session = sessionFactory.openSession();
Ⅱ、下面就可執行curd操作啦,示例一個查詢表中所有數據
<!--查詢表中所有數據--> Query query = session.createQuery("from BookCard"); <!--把查詢出來的數據放到集合中--> List<BookCard> list = query.getResultList();