SpringBoot-SpringData-ManyToOne

之前已经说了oneToOne和ManyToMany : SpringBoot-SpringData-ManyToMany
现在说一下ManyToOne和OneToMany


模型

公司和职员的关系是一对多,一个公司有多个职员,而通常每个职员只能服务于一家公司

说明:
    多对一和一对多其实说的是一种情况
    一方相对另一方是一对多,则另一方相对与之前那一方就是多对一
    多对一和一对多,主要的一方都是多的那一方(即单条数据间的关联外键字段所在表)

项目结构

项目结构

两个domain,公司类Company和职员类Employee
两个dao,公司和职员的数据库操作层
一个测试类OneToManyTest.java


Domain

员工类

@Entity
@Table(name = "t_employee")
public class Employee {

    private Integer employeeId;
    private String  employeeName;
    private Company company;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getEmployeeId() {
        return employeeId;
    }

    /**
     * @ManyToOne:多对一
     */
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH},fetch = FetchType.EAGER)
    @JoinColumn(name = "cid")
    public Company getCompany() {
        return company;
    }

    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeId(Integer employeeId) {
        this.employeeId = employeeId;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

}

公司类

@Entity
@Table(name = "t_company")
public class Company {

    private Integer companyId;
    private String  companyName;
    private Set<Employee> employees;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getCompanyId() {
        return companyId;
    }

    /**
     * @OneToMany 一对多
     * mappedBy,参考了Employee,与 OneToOne相似
     */
    @OneToMany(mappedBy = "company", fetch = FetchType.EAGER)
    public Set<Employee> getEmployees() {
        return employees;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyId(Integer companyId) {
        this.companyId = companyId;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

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

DAO

public interface EmployeeRepository extends JpaRepository<Employee, Long> {

}

public interface CompanyRepository extends JpaRepository<Company, Long> {

}

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(DemoApplication.class)
public class OneToManyTest {

    @Autowired
    private EmployeeRepository employeeRepository;

    @Autowired
    private CompanyRepository companyRepository;

    @Before
    public void testData(){
        //添加公司(和员工关系)
        Company company1 = new Company();
        company1.setCompanyId(1);
        company1.setCompanyName("company1");

        Company company2 = new Company();
        company2.setCompanyId(2);
        company2.setCompanyName("company2");
        companyRepository.save(company1);
        companyRepository.save(company2);

        //添加员工
        Employee employee1 = new Employee();
        employee1.setEmployeeId(1);
        employee1.setEmployeeName("employee1");
        employee1.setCompany(company1);

        Employee employee2 = new Employee();
        employee2.setEmployeeId(2);
        employee2.setEmployeeName("employee2");
        employee2.setCompany(company1);

        Employee employee3 = new Employee();
        employee3.setEmployeeId(3);
        employee3.setEmployeeName("employee3");
        employee3.setCompany(company2);

        Employee employee4 = new Employee();
        employee4.setEmployeeId(4);
        employee4.setEmployeeName("employee4");
        employee4.setCompany(company2);

        employeeRepository.save(employee1);
        employeeRepository.save(employee2);
        employeeRepository.save(employee3);
        employeeRepository.save(employee4);
    }

    @Test
    public void test() throws Exception {

        // 员工映射公司
        Employee employee = employeeRepository.findOne(1);
        Company company_Temp = employee.getCompany();
        Assert.assertEquals("company1", company_Temp.getCompanyName());

        // 公司映射员工
        Company company = companyRepository.findOne(1);
        Set<Employee> employees = company.getEmployees();
        Assert.assertEquals(2, employees.size());

    }

}

测试结果

取公司获得员工实例(一对多)
取公司获得员工实例(一对多)

取员工获得公司实例(多对一)
取员工获得公司实例(多对一)


数据库数据

数据库数据


数据库关系

CREATE TABLE `t_employee` (
  `employee_id` int(11) NOT NULL AUTO_INCREMENT,
  `employee_name` varchar(255) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  PRIMARY KEY (`employee_id`),
  KEY `FK_m2hn6l9dvyd7f67ejbl8u6864` (`cid`),
  CONSTRAINT `FK_m2hn6l9dvyd7f67ejbl8u6864` FOREIGN KEY (`cid`) REFERENCES `t_company` (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

CREATE TABLE `t_company` (
  `company_id` int(11) NOT NULL AUTO_INCREMENT,
  `company_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

主的一方为雇员方,也就是”多对一”中”多”的一方


代码下载

  CSDN下载
  GitHub下载

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BraveWangDev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值