Hibernate一对多,多对一

Hibernate一对多,多对一
今天写一下Hibernate多对一,一对多!
思路具体如下:
1,建实体类
2.一对多实体类用set集合
多对一实体类用对象
3.配置映射文件,指明关系
4.把多存到一里面,再把多存到数据库

我就直接贴代码了,
1.Customer类
package com.entity;

import java.util.HashSet;
import java.util.Set;

/*
* 多对一
*/
public class Customer {
private Integer sid;
private String uname;


//在客户实体类中,一个客户有多个联系人
private Set<Linkman> setlinkman=new HashSet<Linkman>();


public Set<Linkman> getSetlinkman() {
return setlinkman;
}


public void setSetlinkman(Set<Linkman> setlinkman) {
this.setlinkman = setlinkman;
}


public Customer() {}


public Customer(String uname) {

this.uname = uname;
}
public Customer(Integer sid, String uname) {

this.sid = sid;
this.uname = uname;
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}



2.Linkman类
package com.entity;

/*
* 对一
*/
public class Linkman {

private Integer lid;
private String lname;

// 在联系人中,一个联系人只能属于一个客户
private Customer customer;


public Customer getCustomer() {
return customer;
}



public void setCustomer(Customer customer) {
this.customer = customer;
}



public Linkman(){}



public Linkman(String lname) {
this.lname = lname;
}
public Linkman(Integer lid, String lname) {
this.lid = lid;
this.lname = lname;
}
public Integer getLid() {
return lid;
}
public void setLid(Integer lid) {
this.lid = lid;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}


}
2.映射文件(ctrl+n)
Customer.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-10-11 14:25:32 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.entity.Customer" table="CUSTOMER">
<id name="sid" type="java.lang.Integer">
<column name="SID" />
<generator class="native" />
</id>
<property name="uname" type="java.lang.String">
<column name="UNAME" />
</property>
<set name="setlinkman" cascade="save-update,delete">
<key column="SID"></key>
<one-to-many class="com.entity.Linkman" />
</set>

</class>
</hibernate-mapping>
Linkman.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-10-11 14:25:32 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.entity.Linkman" table="LINKMAN">
<id name="lid" type="java.lang.Integer">
<column name="LID" />
<generator class="native" />
</id>
<property name="lname" type="java.lang.String">
<column name="LNAME" />
</property>

<!-- 配置联系人与客户之间关系 -->
<many-to-one name="customer" class="com.entity.Customer" >
<column name="SID" />
</many-to-one>


</class>
</hibernate-mapping>

3.核心文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ db_lly</property>(自己的数据库名)
<property name="hibernate.connection.username">root</property>




<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<mapping resource="com/entity/Customer.hbm.xml"/>
<mapping resource="com/entity/Linkman.hbm.xml"/>

</session-factory>
</hibernate-configuration>


4.测试类

package com.zking;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.Util.HibernateUtils;
import com.entity.Customer;
import com.entity.Linkman;
/*
* 测试
*/
public class Testl {

SessionFactory sessionFactory;
Session session;
Transaction tx;


@Before
public void before() {
sessionFactory = HibernateUtils.getsessionFactory();
session = sessionFactory.openSession();

}

@After
public void after() {
session.close();
sessionFactory.close();
}


@Test
public void getTest() {
try {
//4.开启事务
tx = session.beginTransaction();
//5.操作实体类CRUD
Customer customer = new Customer("pp");

Linkman linkMan = new Linkman();
linkMan.setLname("love");
Linkman linkMan1 = new Linkman();
linkMan1.setLname("oppo");
//2将联系人添加到客户里面
customer.getSetlinkman().add(linkMan);
customer.getSetlinkman().add(linkMan1);


// //3将客户保存
session.save(customer);
//6.提交事务
tx.commit();
} catch (Exception e) {
// TODO: handle exception
if(tx!=null) {
tx.rollback();//回滚
}
e.printStackTrace();
}
}

}
5. HibernateUtils

package com.Util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
static Configuration cfg=null;
static SessionFactory sessionFactory=null;

static {
cfg=new Configuration();
cfg.configure();
sessionFactory=cfg.buildSessionFactory();

}
public static SessionFactory getsessionFactory() {
return sessionFactory;

}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值