使用框架三部曲:類庫,api,和配置文件
首先hibernate基本環境需要的jar包:
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
log4j.jar
mysql-connector-java-5.1.34_1.jar
slf4j-api-1.5.8.jar
slf4j-log4j12.jar
1 定義pojo ,Customer
package com.msyd.hibernate.domain;
public class Customer {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2 定義pojo的映射文件 ,用來映射 庫表和pojo 的。和pojo在一個路徑下,文件名稱爲Customer.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.msyd.hibernate.domain.Customer" table="customers">
<id name="id" column="id" type="integer">
<generator class="increment"/>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="integer"/>
</class>
</hibernate-mapping>
3 連接數據庫的屬性文件,放在src下面即可,oracle我電腦會卡掉,所以連得mysql。文件名爲 hibernate.properties
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/zkbc
hibernate.connection.username=root
hibernate.connection.password=root
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
4 進行curd測試,其他讀寫操作可追加編碼測試。
package com.msyd.hibernate.test; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Before; import org.junit.Test; import com.msyd.hibernate.domain.Customer; public class testCURD { public static SessionFactory sf; @Before public void beforeIniDeal() { Configuration cfg = new Configuration();//加載hibernate.properties cfg.addClass(Customer.class);//加載Customer.hbm.xml sf = cfg.buildSessionFactory(); } @Test public void testAdd() { Session s = sf.openSession(); Transaction tx = s.beginTransaction(); Customer c = new Customer(); c.setAge(17); c.setName("Ketty"); s.save(c); afterDeal(tx, s); } @Test public void testdelete() { Session s = sf.openSession(); Transaction tx = s.beginTransaction(); Customer c = new Customer(); c.setId(1); s.delete(c); afterDeal(tx, s); } @Test public void testUpdate() {//ok Session s = sf.openSession(); Transaction tx = s.beginTransaction(); Customer c = new Customer(); c.setName("Jetty"); c.setAge(15); c.setId(1); s.update(c); afterDeal(tx, s); } /**先獲取,再更改值,然後提交,這樣也可以進行更新數據 * * */ @Test public void testUpdate2() {//ok Session s = sf.openSession(); Transaction tx = s.beginTransaction(); Customer c = (Customer) s.get(Customer.class, 5); c.setName("Jetty"); afterDeal(tx, s); } /**批量更新多條記錄 * s.createQuery 可以按照各種條件進行更新 use by hql語句 * */ @Test public void testBatchUpdate() { Session s = sf.openSession(); Transaction tx = s.beginTransaction(); Query q = s.createQuery("update Customer a set a.age=18 "); q.executeUpdate(); afterDeal(tx, s); } /**查詢一條記錄 * s.get / s.load 均是按照id查詢,是固定的 * */ @Test public void testQueryOne() { Session s = sf.openSession(); Transaction tx = s.beginTransaction(); Customer c = (Customer) s.get(Customer.class, 1); Customer c1 = (Customer) s.load(Customer.class, 1); System.out.println(c + ":" + c1);//當對象已經在堆內存中時,不會再去數據庫中查詢 了 //結果:com.msyd.hibernate.domain.Customer@3e92efc3:com.msyd.hibernate.domain.Customer@3e92efc3 afterDeal(tx, s); } /**查詢多條記錄 * s.createQuery 可以按照各種條件查詢 * * */ @Test public void testQueryAll() { Session s = sf.openSession(); Transaction tx = s.beginTransaction(); //sql結構化查詢語言,現在用的是hql語言,oop ,所以from後面跟的是對象名稱,而非表名 Query q = s.createQuery("from Customer c where c.id>0 ");//可以按照條件查詢 List<Customer> clist = q.list(); for (int i = 0; i < clist.size(); i++) { System.out.println(i + ":" + clist.get(i).getId() + ":" + clist.get(i).getName()); } afterDeal(tx, s); } public void afterDeal(Transaction tx, Session s) { tx.commit(); s.close(); } }
5 這裏僅提供add測試效果,其他結果不一一給出:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select max(id) from customers
Hibernate: insert into customers (name, age, id) values (?, ?, ?)
查詢數據庫:
附註:如果你的運行結果沒成功,即控制檯沒打印sql語句,則可能是mysql服務沒有開啓,需要進行如下操作:
進入windows 的命令提示符,進入c盤的 cd /windows/system32 路徑下,輸入net start mysql,服務啓動,才能運行以下測試。