一.繼承關(guān)系和關(guān)聯(lián)聚集關(guān)系映射
1.整個類層次使用一張表
2.每個葉結(jié)點使用一張表,該表保存了該類自己的和所繼承的所有屬性
3.每個類使用一張表,該表只保存OID以及對應(yīng)類自己的屬性(不含所繼承的屬性)
1.“1對1”或“1對多”關(guān)系的映射,簡單地利用外鍵即可
2.“多對多”關(guān)系的映射,引入一個新的表,專門記錄這種“多對多”關(guān)系
二.編程步驟:事前準備包括建立一個project并且加入外部庫
新建一個Project HibernateSample,然后在Project上點右鍵,選擇Properties ? Java Build Path ? Libraries。選擇Add External JARs,然后將Hibernate目錄下的hibernate3.jar,以及Hibernate目錄下的lib文件夾中所有的jar文件添加進來。
另外我們還必須有MySQL的JDBC驅(qū)動,用上面的辦法同樣把mysql-connector-java-3.1.12-bin.jar添加進我們的Build Path中。
1.創(chuàng)建數(shù)據(jù)庫(例如User表)
2.建立對應(yīng)數(shù)據(jù)庫的類的屬性與操作(例如User類)
3.編寫映射數(shù)據(jù)庫表hibernate mapping,命名為***.hbm.xml(例如User.hbm.xml)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="sample.User" table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" column="name" type="java.lang.String" />
<property name="age" column="age" type="java.lang.Integer" />
</class>
</hibernate-mapping>
明顯可見關(guān)注點包括
A)class中包中的類與數(shù)據(jù)庫中table的對應(yīng)
B)property中 類中ID和屬性與table中字段的對應(yīng)
4.編寫Hibernate配置文件hibernate configurarion file,通常命名:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 是否顯示實際操作數(shù)據(jù)庫時的SQL -->
<property name="show_sql">true</property>
<!-- SQL方言,這邊設(shè)定的是MySQL -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC驅(qū)動程序 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:mysql://localhost/Sample</property>
<!-- 數(shù)據(jù)庫用戶名 -->
<property name="connection.username">root</property>
<!-- 數(shù)據(jù)庫密碼 -->
<property name="connection.password">123456</property>
<!-- 以下設(shè)置對象與數(shù)據(jù)庫表格映像文件 -->
<mapping resource="sample/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
關(guān)注點包括:
A)數(shù)據(jù)庫路徑, 數(shù)據(jù)庫用戶名, 數(shù)據(jù)庫密碼,
B)還有就是指定數(shù)據(jù)庫映射文件mapping resource
5.配置log4j.properties
在src目錄下點右鍵,選擇import,然后選擇General ? File System,接著選擇Hibernate文件夾下的etc文件夾,再選擇log4j.properties文件,最后選擇Finish。
關(guān)鍵配置文件:
hbm是映射配置
cfg是密碼,用戶,以及hbm指定配置
properties是用于配置當前數(shù)據(jù)庫連接的屬性配置
6.編程操作數(shù)據(jù)庫過程
使用對象增加數(shù)據(jù)項:
A)Configuration配置Configuration config = new Configuration().configure();
B)Session工廠獲得SessionFactory sessionFactory = config.buildSessionFactory();
C)Session獲得Session session = sessionFactory.openSession();
D)Transaction事務(wù)啟動Transaction tx = session.beginTransaction();
E)建立映射數(shù)據(jù)的實體類(例如User的一個實例)
F)session操作(例如session.save(user)插入到數(shù)據(jù)庫一個user的對象)
G)關(guān)鍵的Transaction事務(wù)提交,tx.commit();
H)清理包括Transaction對象,session對象,sessionFactory對象的有順序清理
使用Criteria查詢數(shù)據(jù)
A)配置Configuration,SessionFactory,Session與上面相同
B)創(chuàng)建Criteria criteria=session.createCriteria(User.class);
C)創(chuàng)建User列表List users = criteria.list();
D)使用迭代器Iterator iterator = users.iterator();
E)iterator.hasNext(),iterator.next()的使用
F)criteria.add(Expression.eq("name","hibernateUser2"));加上查詢約束
G)users = criteria.list();將會按照查詢約束得到列表.
使用鼓勵的HQL的Query查詢
A)創(chuàng)建Query例如Query query = session.createQuery("from User");
B)獲得數(shù)據(jù)List uers = query.list();
C)遍歷器使用Iterator iterator = users.iterator();又如iterator.hasNext();和iterator.next();
D)使用過濾查詢
query = session.createQuery("from User user where user.name like ?");
query.setParameter(0, "hibernateUser2");Query的setParameter()方法第一個參數(shù)是指定 ? 出現(xiàn)的位置,從 0 開始,第二個參數(shù)則是設(shè)定查詢條件。
然后再List uers = query.list();獲得的將是滿足username==hibernateUser2的條件的結(jié)果
E)清除session和sessionFactory使用close方法.
hibernate_rar