1.说明
customer和orders是一对多
orders和customer是多对一
orders通过customer_id寻找对应的customer
2. 数据库创建表customer和orders
CREATE TABLE [dbo].[customer](
[id] [int] IDENTITY(1,1) NOT NULL,
[username] [varchar](20) NULL,
[balance] [float] NULL
)
CREATE TABLE [dbo].[orders](
[id] [int] IDENTITY(1,1) NOT NULL,
[orderNumber] [varchar](20) NULL,
[cost] [float] NULL,
[customer_id] [int] NULL
)
3.编写POJO(JavaBean)
Customer.java
package com.tang.hibernate;
import java.util.Set;
public class Customer {
private int id;
private String username;
private float balance;
private Set<Order> orders;
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public float getBalance() {
return balance;
}
public void setBalance(float balance) {
this.balance = balance;
}
}
Order.java
package com.tang.hibernate;
public class Order {
private int id;
private String orderNumber;
private float cost;
private Customer customer;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public float getCost() {
return cost;
}
public void setCost(float cost) {
this.cost = cost;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
4.编写配置文件hbm.xml文件
Curtomer.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="com.tang.hibernate.Customer" table="customer">
<!-- 主键设置 -->
<id name="id" type="int">
<column name="id"></column>
<generator class="native"></generator>
</id>
<!-- 属性设置 -->
<property name="username" column="username" type="string"></property>
<property name="balance" column="balance" type="float"></property>
<!-- 设置一对多的"多"端 -->
<set name="orders" inverse="true" cascade="all">
<key column="customer_id" ></key>
<one-to-many class="com.tang.hibernate.Order"/>
</set>
</class>
</hibernate-mapping>
Order.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="com.tang.hibernate.Order" table="orders">
<id name="id" type="int">
<column name="id"></column>
<generator class="native"></generator>
</id>
<property name="orderNumber" column="orderNumber" type="string"></property>
<property name="cost" column="cost" type="float"></property>
<!-- 设置多对一的"一"端 -->
<many-to-one name="customer" class="com.tang.hibernate.Customer"
column="customer_id" cascade="save-update">
</many-to-one>
</class>
</hibernate-mapping>
5.设置配置文件cfg.xml
<?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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="connection.username">sa</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<property name="connection.url">
jdbc:sqlserver://localhost:1433;Databasename=TestDB
</property>
<property name="myeclipse.connection.profile">
MSSQLDriver2
</property>
<!-- <property name="hibernate.show_sql">true</property> -->
<mapping resource="com/tang/hibernate/Curtomer.hbm.xml" />
<mapping resource="com/tang/hibernate/Order.hbm.xml" />
</session-factory>
</hibernate-configuration>
6.编写测试代码
TestCustomer.java
package com.tang.hibernate;
import java.util.List;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class TestCustomer {
public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
try{
new TestCustomer().query(session);
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
if(session != null){
if(session.isOpen()){
session.close();
}
}
}
}
public void query(Session session) throws Exception{
Query q = session.createQuery("from Customer");
List<Customer> list = q.list();
for(Customer c:list){
System.out.print(c.getUsername()+"的花费");
Set<Order> orders = c.getOrders();
for(Order o:orders){
System.out.print("==="+o.getCost());
}
System.out.println();
}
}
}
TestOrder.java
package com.tang.hibernate;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class TestOrder {
public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
try{
new TestOrder().query(session);
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
if(session != null){
if(session.isOpen()){
session.close();
}
}
}
}
public void query(Session session) throws Exception{
Query q = session.createQuery("from Order");
List<Order> list = q.list();
for(Order c:list){
System.out.println("--"+c.getCost());
System.out.println("--"+c.getCustomer().getUsername());
}
}
}
源代码目录结构: