两个实体类分别为Staff和Company,关系为一个Staff对应一个Company,一个Company对应多个Staff
Staff类
package com.maty.entity;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月26日 下午1:40:30 类说明 该类为员工类,在一对多关系中的位置为多
*/
public class Staff
{
// 员工工号
private int sid;
// 员工姓名
private String sname;
// 员工性别
private String sex;
// 在多中引入对应的一
private Company company;
public Company getCompany()
{
return company;
}
public void setCompany(Company company)
{
this.company = company;
}
public int getSid()
{
return sid;
}
public void setSid(int sid)
{
this.sid = sid;
}
public String getSname()
{
return sname;
}
public void setSname(String username)
{
this.sname = sname;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
}
Company类
package com.maty.entity;
import java.util.HashSet;
import java.util.Set;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月27日 下午11:06:33 类说明 该类为公司类,在一对多关系中的位置为一
*/
public class Company
{
// 公司id
private int cid;
// 公司名称
private String cname;
// 公司性质
private String nature;
// 在一中引入对应的多,Hibernate使用Set集合来存放多的对象
Set<Staff> staffs = new HashSet<Staff>();
public Set<Staff> getStaffs()
{
return staffs;
}
public void setStaffs(Set<Staff> staffs)
{
this.staffs = staffs;
}
public int getCid()
{
return cid;
}
public void setCid(int cid)
{
this.cid = cid;
}
public String getCname()
{
return cname;
}
public void setCname(String cname)
{
this.cname = cname;
}
public String getNature()
{
return nature;
}
public void setNature(String nature)
{
this.nature = nature;
}
}
Staff.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入映射的约束条件,位于hibernate-core包中的org.hibernate.hibernate-configuration-3.0.dtd中 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 设定实体类与表的对应关系 -->
<class name="com.maty.entity.Staff" table="t_staff">
<!-- 设定实体类id与表的id -->
<id name="sid" column="sid">
<!-- 设定表中id的增长策略,使用native则表明根据数据库类型来决定主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- 设置其他属性的对应关系 -->
<property name="sname" column="sname"></property>
<property name="sex" column="sex"></property>
<!-- 配置Staff类所对应的唯一Company
name:表示在Staff类中的Company类名称 class:表示Company类的全路径
column:外键名称 -->
<many-to-one name="company" class="com.maty.entity.Company"
column="cid"></many-to-one>
</class>
</hibernate-mapping>
Company.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入映射的约束条件,位于hibernate-core包中的org.hibernate.hibernate-configuration-3.0.dtd中 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 设定实体类与表的对应关系 -->
<class name="com.maty.entity.Company" table="t_company">
<!-- 设定实体类id与表的id -->
<id name="cid" column="cid">
<!-- 设定表中id的增长策略,使用native则表明根据数据库类型来决定主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- 设置其他属性的对应关系 -->
<property name="cname" column="cname"></property>
<property name="nature" column="nature"></property>
<!-- 配置Company类所对应的多个Staff
name:Set集合的名称
column:外键名称(由于Hibernate采用双向维护外键,故需要在一和多两方面分别标志好外键)
class:表明该set集合中存放对象的位置 -->
<set name="staffs">
<key column="cid"></key>
<one-to-many class="com.maty.entity.Staff" />
</set>
</class>
</hibernate-mapping>
Hibernate核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入Hibernate的核心配置文件的约束,该约束位于hibernate-core包中的org.hibernate.hibernate-configuration-3.0.dtd -->
<!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.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 配置数据库的驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 配置数据库的url -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/tx</property>
<!-- 配置数据库的用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 配置数据库的密码 -->
<property name="hibernate.connection.password">wangxiaowei</property>
<!-- 第二步:配置Hibernate本身的设置 -->
<!-- 是否在console显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否对sql语句进行格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- 是否自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 第三步:加载hibernate mapping文件 -->
<mapping resource="com/maty/entity/Company.hbm.xml" />
<mapping resource="com/maty/entity/Staff.hbm.xml" />
</session-factory>
</hibernate-configuration>
Utils类
package com.maty.Utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月27日 下午11:38:04
* 类说明 该类为工具类,主要用来获取SessfionFactory
*/
public class HibernateUtils
{
public static SessionFactory getSessionFactory()
{
Configuration cfg = new Configuration().configure();
return cfg.buildSessionFactory();
}
}
测试类
package com.maty.text;
import org.junit.Test;
import com.maty.Utils.HibernateUtils;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月27日 下午11:40:02
* 类说明
*/
public class MyTest
{
@Test
public void test1()
{
HibernateUtils.getSessionFactory();
}
}
测试结果符合预期