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

本文介绍了一个简单的Hibernate一对一关联映射示例,包括数据库脚本、Domain对象、hbm文件、DAO接口与实现及Spring配置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库脚本:

 

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、付费专栏及课程。

余额充值