hibernate3 1、環境初步搭建curd

使用框架三部曲:類庫,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,服務啓動,才能運行以下測試。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章