两个一对多的关系就构成了多对多的关系
举个例子:
需求:程序员和项目之间的关系(编写一个项目的管理系统)
程序员 项目
一个程序员可以开发多个项目 程序员----->项目(一对多的关系)
一个项目是由多个开发人员来进行开发 项目----->程序员(一对多的关系)
Project(项目表)
proId proName proStartTime proEndTime proDesc
Develpoler(开发人员表)
devId devName devDes devGender devTel
t_relation(关系表)
proId devId
1.项目表代码
private int proId;
private String proName;
private Date proStartTime;
private Date proEndTime;
private String proDes;
private Set<Develpoer> devs= new HashSet<Develpoer>();
上面的属性都生成gettter.setter方法和构造方法
2.开发人员表
private int devId;
private String devName;
private String devDes;
private int devGender;
private String devTel;
private Set<Project> pros=new HashSet<Project>();
同上
3.hibernate总体配置
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接驱动 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--
设置请求的数据库:
jdbc:mysql://localhost3306/hibernate_day1
如果是本地的数据库可以省略localhost33606
jdbc:mysql:///hibernate_day1
-->
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate_day1</property>
<!-- 用户名 -->
<property name="connection.username">root</property>
<!--密码 -->
<property name="connection.password">0000</property>
<!-- 数据库方言配置 针对不同的数据库配置不同的信息,例子是mysql -->
<!--根据底层不同的数据库生成不同的sql语句 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 是否将hibernate编写的数据库语句输出打控制台上(可检查其是否正确)-->
<property name="show_sql">true</property>
<!--格式化打印控制台输出的sql语句-->
<property name="format_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- update 如果存在则更新表格,如果不存在就创建表格
create 每次运行的时候都需要重新建表,不管其是否存在 -->
<!-- 下面配置的是映射文件 -->
<mapping resource="cn/pzhu/pojo/Develpoer.hbm.xml"/>
<mapping resource="cn/pzhu/pojo/Project.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4..项目表的配置
<?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">
<hibernate-mapping package="cn.pzhu.pojo" >
<class name="Project" table="project" >
<!-- 配置主键 -->
<id name="proId" column="proId">
<!-- 自增长 -->
<generator class="native"/>
</id>
<!-- 配置普通列 -->
<property name="proName" type="java.lang.String" length="10"/>
<property name="proStartTime"></property>
<property name="proEndTime"></property>
<property name="proDes" type="java.lang.String" length="10"></property>
<set name="devs" table="t_relation" cascade="all">
<key column="pro_id"></key>
<many-to-many column="dev_id" class="Develpoer"></many-to-many>
</set>
</class>
</hibernate-mapping>
5.开发人员表的配置
<?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">
<hibernate-mapping package="cn.pzhu.pojo" >
<class name="Develpoer" table="develpoer" >
<!-- 配置主键 -->
<id name="devId" column="devId" type="java.lang.Integer">
<!-- 自增长 -->
<generator class="native"/>
</id>
<!-- 配置普通列 -->
<property name="devName" type="java.lang.String" length="10"/>
<property name="devDes" type="java.lang.String" length="50"></property>
<property name="devGender" type="java.lang.Integer" ></property>
<property name="devTel" type="java.lang.String" length="11"></property>
<!-- 配置多对多的集合映射 -->
<set name="pros" table="t_relation" cascade="all">
<!-- 这个key配置的是当前的类的主键 -->
<key column="dev_id"></key>
<!--
column:配置的是对方的主键在关系表中映射的这个值的列名
class:对方类的名字
-->
<many-to-many column="pro_id" class="Project"></many-to-many>
</set>
</class>
</hibernate-mapping>
6.测试类
public class test_001 {
@Test
public void test_0012() {
// TODO Auto-generated constructor stub
Develpoer develpoer=new Develpoer("长安", "彩笔", GenderEnum.man.ordinal(), "123");
Set<Project> projects=develpoer.getPros();
projects.add(new Project("11111", new Date(), new Date(), "小乖乖"));
projects.add(new Project("111112", new Date(), new Date(), "小乖乖2"));
projects.add(new Project("111113", new Date(), new Date(), "小乖乖3"));
projects.add(new Project("111114", new Date(), new Date(), "小乖乖4"));
HibernateUtil.save(develpoer);
}
@Test
public void test_1() {
Project project=new Project("妹妹", new Date(), new Date(), "happy");
Develpoer developer=new Develpoer();
developer.setDevDes("十足的二货1");
developer.setDevGender(GenderEnum.woman.ordinal());
developer.setDevName("铁蛋1");
developer.setDevTel("1314....");
Develpoer developer1=new Develpoer();
developer1.setDevDes("标准的码农1");
developer1.setDevGender(GenderEnum.other.ordinal());
developer1.setDevName("狗剩1");
developer1.setDevTel("1571...");
Set<Develpoer> developers=project.getDevs();
developers.add(developer);
developers.add(developer1);
//最终调用类进行持久化
HibernateUtil.save(project);
}
}