数据库脚本:
create table address (id varchar ( 10 ) primary key ,
detail varchar ( 10 ),
customerid varchar ( 10 ),
foreign key (customerid) references customer(id));
insert into customer values (" 1 ","john");
insert into customer values (" 2 ","marry");
insert into customer values (" 3 ","cathy");
insert into address values (" 1 ","beijng"," 1 ");
insert into address values (" 2 ","tianjin"," 1 ");
insert into address values (" 3 ","shanghai"," 2 ");
insert into address values (" 4 ","guangzhou"," 2 ");
insert into address values (" 5 ","chongqing"," 3 ");
insert into address values (" 6 ","shenzhen"," 3 ");
或者创建表后用如下语句增加外键约束
alter table address add constraint pf foreign key (customerid) references customer(id);
Domain对象
import java.util.HashSet;
import java.util.Set;
/** */ /**
* Customer generated by MyEclipse Persistence Tools
*/
public class Customer implements java.io.Serializable ... {
// Fields
private String id;
private String name;
private Set addresses = new HashSet(0);
// Constructors
/** *//** default constructor */
public Customer() ...{
}
/** *//** minimal constructor */
public Customer(String id) ...{
this.id = id;
}
/** *//** full constructor */
public Customer(String id, String name, Set addresses) ...{
this.id = id;
this.name = name;
this.addresses = addresses;
}
// Property accessors
public String getId() ...{
return this.id;
}
public void setId(String id) ...{
this.id = id;
}
public String getName() ...{
return this.name;
}
public void setName(String name) ...{
this.name = name;
}
public Set getAddresses() ...{
return this.addresses;
}
public void setAddresses(Set addresses) ...{
this.addresses = addresses;
}
}
/** */ /**
* Address generated by MyEclipse Persistence Tools
*/
public class Address implements java.io.Serializable ... {
// Fields
private String id;
private Customer customer;
private String detail;
// Constructors
/** *//** default constructor */
public Address() ...{
}
/** *//** minimal constructor */
public Address(String id) ...{
this.id = id;
}
/** *//** full constructor */
public Address(String id, Customer customer, String detail) ...{
this.id = id;
this.customer = customer;
this.detail = detail;
}
// Property accessors
public String getId() ...{
return this.id;
}
public void setId(String id) ...{
this.id = id;
}
public Customer getCustomer() ...{
return this.customer;
}
public void setCustomer(Customer customer) ...{
this.customer = customer;
}
public String getDetail() ...{
return this.detail;
}
public void setDetail(String detail) ...{
this.detail = detail;
}
}
hbm文件:
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
< hibernate-mapping >
< class name ="ch9.SimpleOneToMany.Customer" table ="customer" catalog ="spring" >
< id name ="id" type ="java.lang.String" >
< column name ="id" length ="10" />
< generator class ="assigned" />
</ id >
< property name ="name" type ="java.lang.String" >
< column name ="name" length ="10" />
</ property >
< set name ="addresses" inverse ="true" lazy ="false" >
< key >
< column name ="customerid" length ="10" />
</ key >
< one-to-many class ="ch9.SimpleOneToMany.Address" />
</ set >
</ class >
</ hibernate-mapping >
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
< hibernate-mapping >
< class name ="ch9.SimpleOneToMany.Address" table ="address" catalog ="spring" >
< id name ="id" type ="java.lang.String" >
< column name ="id" length ="10" />
< generator class ="assigned" />
</ id >
< many-to-one name ="customer" class ="ch9.SimpleOneToMany.Customer" lazy ="false" >
< column name ="customerid" length ="10" />
</ many-to-one >
< property name ="detail" type ="java.lang.String" >
< column name ="detail" length ="10" />
</ property >
</ class >
</ hibernate-mapping >
DAO接口:
import java.util.List;
public interface IDAO ... {
public List getAllCustomer();
}
DAO实现:
import java.util.ArrayList;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class TestDAOImpl extends HibernateDaoSupport implements IDAO ... {
public List getAllCustomer() ...{
return getHibernateTemplate().find("from Customer");
}
}
配置文件:
< beans
xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
< bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource" >
< property name ="driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
< property name ="username" >
< value > root </ value >
</ property >
< property name ="password" >
< value > 1234 </ value >
</ property >
< property name ="url" >
< value > jdbc:mysql://localhost:3306/spring </ value >
</ property >
</ bean >
< bean id ="sessionFactory" class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
< property name ="mappingResources" >
< list >
< value > ch9/SimpleOneToMany/Address.hbm.xml </ value >
< value > ch9/SimpleOneToMany/Customer.hbm.xml </ value >
</ list >
</ property >
< property name ="hibernateProperties" >
< props >
< prop key ="hibernate.dialect" > org.hibernate.dialect.MySQL5Dialect </ prop >
< prop key ="hibernate.show_sql" > true </ prop >
</ props >
</ property >
</ bean >
< bean id ="testDAO" class ="ch9.SimpleOneToMany.TestDAOImpl" >
< property name ="sessionFactory" >
< ref bean ="sessionFactory" />
</ property >
</ bean >
</ beans >
测试代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test ... {
/** *//**
* @param args
*/
public static void main(String[] args) ...{
ApplicationContext context=new ClassPathXmlApplicationContext("ch9/SimpleOneToMany/applicationContext.xml");
TestDAOImpl testDAOImpl=(TestDAOImpl)context.getBean("testDAO");
List result=new ArrayList();
result=testDAOImpl.getAllCustomer();
for (Iterator iter = result.iterator(); iter.hasNext();) ...{
Customer element = (Customer) iter.next();
System.out.println(element.getName()+element.getAddresses().size());
Iterator iter1=element.getAddresses().iterator();
while(iter1.hasNext())...{
Address element1 = (Address) iter1.next();
System.out.println("--"+element1.getDetail());
}
}
}
}
结果:
Hibernate: select customer0_.id as id1_, customer0_.name as name1_ from spring.customer customer0_
Hibernate: select addresses0_.customerid as customerid1_, addresses0_.id as id1_, addresses0_.id as id0_0_, addresses0_.customerid as customerid0_0_, addresses0_.detail as detail0_0_ from spring.address addresses0_ where addresses0_.customerid=?
Hibernate: select addresses0_.customerid as customerid1_, addresses0_.id as id1_, addresses0_.id as id0_0_, addresses0_.customerid as customerid0_0_, addresses0_.detail as detail0_0_ from spring.address addresses0_ where addresses0_.customerid=?
Hibernate: select addresses0_.customerid as customerid1_, addresses0_.id as id1_, addresses0_.id as id0_0_, addresses0_.customerid as customerid0_0_, addresses0_.detail as detail0_0_ from spring.address addresses0_ where addresses0_.customerid=?
john2
--tianjin
--beijng
marry2
--guangzhou
--shanghai
cathy2
--shenzhen
--chongqing