资讯专栏INFORMATION COLUMN

慕课网_《Hibernate初探之多对多映射》学习总结

caozhijian / 2003人阅读

时间:2017年07月11日星期二
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学源码:无
学习源码:https://github.com/zccodere/s...

第一章:应用场景 1-1 多对多的应用场景

案例分析:企业项目开发过程中

一个项目可由多个员工参与开发
一个员工可同时参与开发多个项目

示意图

多对多关联

多对多关联关系也是常见的一种关联关系,如项目和员工之间就是典型的多对多关系
多对多关联关系一般采用中间表的形式来实现,即新增一张包含关联双方主键的关联表
多对多关联可以使用元素和元素进行配置
第二章:配置案例 2-1 创建项目和表

创建一个maven项目,名为hibernatemtm,POM文件如下


    4.0.0

    com.myimooc
    hibernatemtm
    0.0.1-SNAPSHOT
    jar

    hibernatemtm
    http://maven.apache.org

    
        UTF-8
        UTF-8
    

    
        
        
            org.hibernate
            hibernate-core
            4.3.0.Final
        

        
        
            mysql
            mysql-connector-java
            5.1.38
        
        
        
            junit
            junit
            3.8.1
            test
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                
            
        
    
    

创建表

create table project
(
    proid int primary key,
    proname varchar(20) not null
);

create table employee
(
    empid int primary key,
    empname varchar(20)
);

create table proemp
(
    rproid int,
    rempid int
);

alter table proemp add constraint fk_rproid 
    foreign key (rproid) references project(proid);
alter table proemp add constraint fk_rempid
    foreign key (rempid) references employee(empid);    
    
 
2-2 持久化类

代码演示

1.编写Project类

package com.myimooc.hibernatemtm.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * project 实体类
 * @author ZhangCheng on 2017-07-11
 *
 */
public class Project implements Serializable{
    
    private static final long serialVersionUID = 1L;

    private int proid;
    
    private String proname;
    
    // 添加一个员工的集合
    private Set employees = new HashSet();

    public Project() {
    }

    public Project(int proid, String proname) {
        this.proid = proid;
        this.proname = proname;
    }

    public Project(int proid, String proname, Set employees) {
        this.proid = proid;
        this.proname = proname;
        this.employees = employees;
    }

    @Override
    public String toString() {
        return "Project [proid=" + proid + ", proname=" + proname + ", employees=" + employees + "]";
    }

    public int getProid() {
        return proid;
    }

    public void setProid(int proid) {
        this.proid = proid;
    }

    public String getproname() {
        return proname;
    }

    public void setproname(String proname) {
        this.proname = proname;
    }

    public Set getEmployees() {
        return employees;
    }

    public void setEmployees(Set employees) {
        this.employees = employees;
    }
    
    
}

2.编写Employee类

package com.myimooc.hibernatemtm.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * employee 实体类
 * @author ZhangCheng on 2017-07-11
 *
 */
public class Employee implements Serializable{
    
    private static final long serialVersionUID = 1L;

    private int empid;
    
    private String empname;
    
    // 添加一个项目的集合
    private Set projects = new HashSet();

    public Employee() {
    }

    public Employee(int empid, String empname) {
        this.empid = empid;
        this.empname = empname;
    }

    public Employee(int empid, String empname, Set projects) {
        this.empid = empid;
        this.empname = empname;
        this.projects = projects;
    }

    @Override
    public String toString() {
        return "Employee [empid=" + empid + ", empname=" + empname + ", projects=" + projects + "]";
    }

    public int getEmpid() {
        return empid;
    }

    public void setEmpid(int empid) {
        this.empid = empid;
    }

    public String getEmpname() {
        return empname;
    }

    public void setEmpname(String empname) {
        this.empname = empname;
    }

    public Set getProjects() {
        return projects;
    }

    public void setProjects(Set projects) {
        this.projects = projects;
    }

}
2-3 配置映射文件

代码演示

1.编写Project.hbm.xml文件




    
        
            
        
        
            
        
        
        
            
            
        
    
    

2.编写Employee.hbm.xml文件




    
        
            
        
        
            
        
        
        
            
            
        
    

3.编写hibernate.cfg.xml文件




    
        org.hibernate.dialect.MySQLDialect
        com.mysql.jdbc.Driver
        root
        root
        
            
        
        true
        update
        
        
         
        
        
    
2-4 测试

代码演示

1.编写HibernateUtil类

package com.myimooc.hibernatemtm.util;

/**
 * session会话工具类
 * @author ZhangCheng on 2017-07-11
 *
 */
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    
    private static SessionFactory sessionFactory;
    
    private static Session session;

    static {
        // 创建Configuration对象,读取hibernate.cfg.xml文件,完成初始化
        Configuration config = new Configuration().configure();
        StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()
                .applySettings(config.getProperties());
        StandardServiceRegistry ssr=ssrb.build();
        sessionFactory=config.buildSessionFactory(ssr);
    }
    
    /**
     * 获取SessionFactory
     * @return
     */
    public static SessionFactory getSessionFactory(){
        return sessionFactory;
    }
    
    /**
     * 获取Session
     * @return
     */
    public static Session getSession(){
        session=sessionFactory.openSession();
        return session;
    }
    
    /**
     * 关闭Session
     * @param session
     */
    public static void closeSession(Session session){
        if(session!=null){
            session.close();
        }
    }
}

2.编写Test类

package com.myimooc.hibernatemtm.test;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.myimooc.hibernatemtm.entity.Employee;
import com.myimooc.hibernatemtm.entity.Project;
import com.myimooc.hibernatemtm.util.HibernateUtil;

/**
 * 多对多关联关系的配置
 * 同时建立了Project和Employee之间的双向多对多关联关系
 * 关联关系的维护交由Project方来处理,并且在保存Project对象时会一并保存Employee对象
 * @author ZhangCheng on 2017-07-11
 */
public class Test {
    public static void main(String[] args) {
        Project project1=new Project(1001,"项目一");
        Project project2=new Project(1002,"项目二");
        Employee employee1=new Employee(1,"慕女神");
        Employee employee2=new Employee(2,"imooc");
        
        //参加项目1的员工有慕女神和imooc
        project1.getEmployees().add(employee1);
        project1.getEmployees().add(employee2);
        // 参加项目2的员工有慕女神
        project2.getEmployees().add(employee1);
        
        Session session=HibernateUtil.getSession();
        Transaction tx=session.beginTransaction();
        session.save(project1);
        session.save(project2);
        tx.commit();
        HibernateUtil.closeSession(session);
    }
}
第三章:课程总结 3-1 多对多总结

课程总结

实现多对多关联关系
在数据库底通过添加中间表来指定关联关系
    在双方的实体中添加一个保存对方的集合
    在双方的映射文件中使用元素和元素进行关联关系的配置

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67371.html

相关文章

  • 课网_Hibernate注解》学习总结

    摘要:时间年月日星期二说明本文部分内容均来自慕课网。文件如下在目录下,创建文件指定映射文件的路径注解映射实体类可选,对应数据库中的一个表。 时间:2017年07月11日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:类级别注解 1-1 本章简介 本章简介 H...

    Jaden 评论0 收藏0
  • 课网_Hibernate缓存策略》学习总结

    摘要:时间年月日星期二说明本文部分内容均来自慕课网。返回对象不同返回持久化实体类对象返回代理对象。与缓存的关系不同只缓存,但不使用缓存查询缓存除外会使用缓存。 时间:2017年07月11日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:无 第一章:概述 1-1 概述 课程内容 了解缓存 掌握Hibernate一级缓存的使用 掌握H...

    codergarden 评论0 收藏0
  • 课网_《基于SSH实现员工管理系统之框架整合篇》学习总结

    时间:2017年08月16日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 课程目录 1.ssh知识点回顾 2.搭建ssm开发环境 3.struts2整合spring 4.spring整合hibernate 5.案例:使用ssh框架开发...

    icattlecoder 评论0 收藏0
  • 课网_《2小时学会SpringBoot》学习总结

    摘要:小时学会学习总结时间年月日星期六说明本文部分内容均来自慕课网。慕课网教学示例源码暂无。数据库操作下第六章事务管理事务管理只有查询的时候不加事务,其它任何操作都要加事务。第七章课程回顾课程回顾总结介绍安装配置的使用数据库操作 《2小时学会SpringBoot》学习总结 时间:2017年2月18日星期六说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示...

    aisuhua 评论0 收藏0
  • Hibernate映射关系

    摘要:前言首先声明,这是一篇转发博客,不属于原创。关系映射有下面几种类型一对一外键关联映射单向一对一外键关联,使用,并设置了级联操作。设置了外键的名称为数据库字段名,如果不设置,则默认为另一类的属性名,外键的值是唯一的。 前言 首先声明,这是一篇转发博客,不属于原创。但是感觉很有用,所以在本人的博客中记录下来。 Hibernate Annotation关系映射有下面几种类型: 一对一...

    gougoujiang 评论0 收藏0

发表评论

0条评论

caozhijian

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<