数据库脚本:
create table customer (id varchar(10) primary key,name varchar(10));
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对象
package ch9.SimpleOneToMany;
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;
}
}
package ch9.SimpleOneToMany;

/** *//**
* 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文件:
<?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">
<!--
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>


<?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">
<!--
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接口:
package ch9.SimpleOneToMany;
import java.util.List;

public interface IDAO ...{
public List getAllCustomer();
}
DAO实现:
package ch9.SimpleOneToMany;
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");
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<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>
测试代码:
package ch9.SimpleOneToMany;
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
本文介绍了一个简单的Hibernate一对一关联映射示例,包括数据库脚本、Domain对象、hbm文件、DAO接口与实现及Spring配置等内容。
1068

被折叠的 条评论
为什么被折叠?



