Spring+Hibernate集成开发只1对多实例

本文介绍了一个简单的Hibernate一对一关联映射案例,包括数据库表结构的设计、对应的Java实体类定义、hbm.xml映射文件及Spring配置文件等内容,并提供了一个测试类来验证整个流程。

数据库脚本:

 

create table customer (id varchar(10primary key,name varchar(10)); create table address (id varchar(10primary 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值