本工程以项目与开发人员构成多对多的关系来展开,构建多对多的关系,具体实现代码如下所示:
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>