hibernate3.0实例 建议是有一点点是一点点基础的人又没有hibernate基础和经验的人比较适合(所谓一点点基础是最起码不要我介绍一些配置文件的什么的.).注意我用的JDBC驱动com.inet.tds.TdsDriver 要是感觉注释太少,或者是在调试的过程中出现BUG或者是什么的,请回贴,我会答复你. 大家一起努力学习吧.
1、建立PO对象 建PO对象Customer、Order以及它们的hibernate配置文件
/* * Created on 2005-10-12 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package testdemo;
import java.util.HashSet; import java.util.Set;
/** * @author liuzj * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */
public class Customer { private int id;
private String username;
private String password;
private Set orders = new HashSet();
public Customer() { }
public Customer(String username, String password, Set orders) { this.username = username; this.password = password;
this.orders = orders;
}
public int getId() { return id; }
public String getPassword() { return password; }
public String getUsername() { return username; }
public Set getOrders() { return orders; }
public void setId(int id) { this.id = id; }
public void setPassword(String password) { this.password = password; }
public void setUsername(String username) { this.username = username; }
public void setOrders(Set orders) { this.orders = orders; }
}
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate./hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="testdemo.Customer" table="CUSTOMER" dynamic-insert="true" dynamic-update="true"> <id name="id" column="ID"> <generator class="increment" /> </id> <property name="username" column="USERNAME" /> <property name="password" column="PASSWORD" /> <set name="orders" inverse="true" cascade="save-update" > <key column="CUSTOMER_ID" /> <one-to-many class="testdemo.Order" /> </set> </class> </hibernate-mapping>
/* * Created on 2005-10-13 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package testdemo;
/** * @author liuzj * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */
import java.io.Serializable; public class Order implements Serializable {
private Long id; private String orderNumber; private double price; private Customer customer;
public Order() { } public Order(String orderNumber,double price,Customer customer) { this.orderNumber=orderNumber; this.price=price; this.customer=customer; } public Long getId() { return this.id; }
public void setId(Long id) { this.id = id; }
public String getOrderNumber() { return this.orderNumber; }
public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; }
public Customer getCustomer() { return this.customer; }
public void setCustomer(Customer customer) { this.customer = customer; }
public double getPrice(){ return this.price; } private void setPrice( double price ){ this.price = price; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate./hibernate-mapping-3.0.dtd">
<hibernate-mapping package="testdemo">
<class name="Order" table="ORDERS"> <id name="id"> <generator class="increment"/> </id> <property name="orderNumber" column="ORDER_NUMBER"/> <property name="price" />
<many-to-one name="customer" column="CUSTOMER_ID" class="Customer" not-null="true" />
</class> </hibernate-mapping>
上面的PO已经建立完成,下面是一个测试类
/* * Created on 2005-10-12 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package testdemo;
import java.util.HashSet;
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration;
import testdemo.Customer;
/** * @author liuzj * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */
public class Test {
SessionFactory sessionFactory = new Configuration().configure().addClass( testdemo.Customer.class).addClass(Order.class).buildSessionFactory(); Session session = sessionFactory.openSession(); public void saveCustomer(Customer customer) throws Exception { Transaction tx = null; try { tx = session.beginTransaction(); session.save(customer); tx.commit();
} catch (Exception e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } } public void testmethod()throws Exception { Customer customer=new Customer("lzhengj","001",new HashSet()); Order order1=new Order("Order",1000,customer); Order order2=new Order("Order",2000,customer); customer.getOrders().add(order1); customer.getOrders().add(order2); this.saveCustomer(customer);
}
public static void main(String[] args) { try{ new Test().testmethod(); }catch(Exception e) { System.out.println("this is the testmethod throw exception....."); e.printStackTrace(); }
} }
ok,下面是一个hibernate的配置hibernate.cfg.xml(位于应用目录下面)
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate./hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.url"> jdbc:inetdae:localhost:1433?charset=gbk&database=hibernate_test </property> <property name="hibernate.connection.driver_class"> com.inet.tds.TdsDriver </property> <property name="hibernate.connection.username"> sa </property> <property name="hibernate.connection.password"> aa </property> <property name="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="show_sql"> true </property> </session-factory> </hibernate-configuration>
另外还需要配置一个LOG文件log4j.properties (位于应用目录下面)
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n
|
|