本工程以项目与开发人员构成多对多的关系来展开,构建多对多的关系,具体实现代码如下所示:
1.hibernate.cfg.xml文件
-
<!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节点代表一个数据库 –>
-
<session-factory>
-
<!– 1.数据库连接配置 –>
-
<property name=“hibernate.connection.driver_class”>com.mysql.jdbc.Driver
</property>
-
<property name=“hibernate.connection.url”>jdbc:mysql:///hib-demo
</property>
-
<property name=“hibernate.connection.username”>root
</property>
-
<property name=“hibernate.connection.password”>123456
</property>
-
<!–数据库方法配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql –>
-
<property name=“hibernate.dialect”>org.hibernate.dialect.MySQL5Dialect
</property>
-
-
<!– 2.其他相关配置 –>
-
<!–2.1显示hibernate在运行的时候执行的sql语句 –>
-
<property name=“hibernate.show_sql”>true
</property>
-
<!– 2.2格式化sql
-
<property name=”hibernate.format_sql”>true</property>–>
-
<!– 2.3自动建表 –>
-
<property name=“hibernate.hbm2ddl.auto”>update
</property>
-
<!– 3.加载所有映射
-
<mapping resource=”cn/itcast/a_hello/Employee.hbm.xml”/>–>
-
</session-factory>
-
</hibernate-configuration>
2.Developer
-
package cn.itcast.c_many2many;
-
-
import java.util.HashSet;
-
import java.util.Set;
-
-
//开发人员信息
-
public
class Developer {
-
private Integer d_id;
//开发人员编号
-
private String d_name;
//开发人员姓名
-
//开发人员参与的多个项目
-
private Set<Project> projects=
new HashSet<Project>();
-
public Integer getD_id() {
-
return d_id;
-
}
-
public void setD_id(Integer d_id) {
-
this.d_id = d_id;
-
}
-
public String getD_name() {
-
return d_name;
-
}
-
public void setD_name(String d_name) {
-
this.d_name = d_name;
-
}
-
public Set<Project> getProjects() {
-
return projects;
-
}
-
public void setProjects(Set<Project> projects) {
-
this.projects = projects;
-
}
-
-
-
-
}
3.Project
-
package cn.itcast.c_many2many;
-
-
import java.util.HashSet;
-
import java.util.Set;
-
-
public
class Project {
-
private Integer prj_id;
//项目编号
-
private String prj_name;
//项目名称
-
//项目下的多个员工
-
private Set<Developer> developers=
new HashSet<Developer>();
-
public Integer getPrj_id() {
-
return prj_id;
-
}
-
public void setPrj_id(Integer prj_id) {
-
this.prj_id = prj_id;
-
}
-
public String getPrj_name() {
-
return prj_name;
-
}
-
public void setPrj_name(String prj_name) {
-
this.prj_name = prj_name;
-
}
-
public Set<Developer> getDevelopers() {
-
return developers;
-
}
-
public void setDevelopers(Set<Developer> developers) {
-
this.developers = developers;
-
}
-
-
-
-
-
}
4.Developer.hbm.xml
-
<?xml version="1.0"?>
-
<!DOCTYPE hibernate-mapping PUBLIC
-
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-
<!--
-
-
This mapping demonstrates content-based discrimination for the
-
table-per-hierarchy mapping strategy, using a formula
-
discriminator.
-
-
-->
-
<!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中 -->
-
<!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径)
-
auto-import 默认为true,在写HQL的时候自动导入包名
-
如果指定为false,在写HQL的时候必须要写上类的全名-->
-
<hibernate-mapping package="cn.itcast.c_many2many">
-
<class name="Developer" table="t_developer">
-
<id name="d_id">
-
<generator class="native">
</generator>
-
</id>
-
<property name="d_name">
</property>
-
-
<set name="projects" table="t_relation">
-
<key column="did">
</key>
-
<many-to-many column="prjId" class="Project">
</many-to-many>
-
</set>
-
-
-
</class>
-
-
-
</hibernate-mapping>
5.Project.hbm.xml
-
<?xml version="1.0"?>
-
<!DOCTYPE hibernate-mapping PUBLIC
-
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-
<!--
-
-
This mapping demonstrates content-based discrimination for the
-
table-per-hierarchy mapping strategy, using a formula
-
discriminator.
-
-
-->
-
<!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中 -->
-
<!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径)
-
auto-import 默认为true,在写HQL的时候自动导入包名
-
如果指定为false,在写HQL的时候必须要写上类的全名-->
-
<hibernate-mapping package="cn.itcast.c_many2many">
-
<class name="Project" table="t_project">
-
<id name="prj_id">
-
<generator class="native">
</generator>
-
</id>
-
<property name="prj_name">
</property>
-
-
<!-- 多对多映射:
-
1.映射的集合属性:developers
-
2.集合属性:对应的中间表,t_relation
-
3.外键字段:prjid
-
4.外键字段:对应的中间表字段,did
-
5.集合属性元素的类型 -->
-
<set name="developers" table="t_relation">
-
<key column="prjId">
</key>
-
<many-to-many column="did" class="Developer">
</many-to-many>
-
</set>
-
-
-
-
</class>
-
-
-
</hibernate-mapping>
6.junit测试
-
package cn.itcast.c_many2many;
-
-
-
-
import org.hibernate.SessionFactory;
-
import org.hibernate.Transaction;
-
import org.hibernate.cfg.Configuration;
-
import org.hibernate.classic.Session;
-
import org.junit.Test;
-
-
public
class App_save {
-
private
static SessionFactory sf;
-
static{
-
sf=
new Configuration()
-
.configure()
-
.addClass(Project.class)
-
.addClass(Developer.class)
//测试的时候使用
-
.buildSessionFactory();
-
}
-
-
//多对多数据的保存,只能通过一方维护另一方,不能重复维护!
-
@Test
-
public void Save() {
-
Session session=sf.openSession();
-
session.beginTransaction();
-
//创建项目对象
-
Project prj_ds=
new Project();
-
prj_ds.setPrj_name(
"电商系统");
-
Project prj_oa=
new Project();
-
prj_oa.setPrj_name(
"OA系统");
-
//创建员工对象
-
Developer dev_cj=
new Developer();
-
dev_cj.setD_name(
"刘德华");
-
Developer dev_wc=
new Developer();
-
dev_wc.setD_name(
"高园园");
-
Developer dev_lz=
new Developer();
-
dev_lz.setD_name(
"王明");
-
//关系
-
prj_ds.getDevelopers().add(dev_cj);
-
prj_ds.getDevelopers().add(dev_wc);
//电商系统 :刘德华,高园园
-
prj_oa.getDevelopers().add(dev_cj);
-
prj_oa.getDevelopers().add(dev_lz);
//OA系统:刘德华,王明
-
//保存
-
session.save(dev_cj);
-
session.save(dev_wc);
-
session.save(dev_lz);
-
-
session.save(prj_ds);
-
session.save(prj_oa);
-
-
session.getTransaction().commit();
-
session.close();
-
//得到九条结果
-
/*Hibernate: insert into t_developer (d_name) values (?)
-
Hibernate: insert into t_developer (d_name) values (?)
-
Hibernate: insert into t_developer (d_name) values (?)
-
Hibernate: insert into t_project (prj_name) values (?)
-
Hibernate: insert into t_project (prj_name) values (?)
-
Hibernate: insert into t_relation (prjId, did) values (?, ?)
-
Hibernate: insert into t_relation (prjId, did) values (?, ?)
-
Hibernate: insert into t_relation (prjId, did) values (?, ?)
-
Hibernate: insert into t_relation (prjId, did) values (?, ?)
-
*/
-
-
}
-
-
@Test
-
public void Save2() {
-
Session session=sf.openSession();
-
session.beginTransaction();
-
-
-
session.getTransaction().commit();
-
session.close();
-
-
-
-
}
-
}
</div>