1. 一对多的关联关系

1.1. 角色和用户是一对多的关联关系

角色类(对应表名: t_role): 一方

用户类(对应表名: t_user): 多方

1.2. 角色表

1.3. 用户表

2. 一对多的关联关系例子

2.1. 创建一个名为spring-data-jpa-one2many的Java项目, 同时添加相关jar包, 并添加JUnit能力。

2.2. 新建Role.java

package com.bjbs.pojo;import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;@Entity // 指定该类是实体类
@Table(name = "t_role") // 指定数据库表名(表名和实体类对应)
public class Role implements Serializable {private static final long serialVersionUID = 1L;@Id // 指定为主键@GeneratedValue(strategy = GenerationType.IDENTITY) // 指定主键生成策略@Column(name = "id") // 指定表中列名(列名和属性名对应)private Integer id;@Column(name = "name")private String name; // 角色名@OneToMany(mappedBy="role")private Set<User> users = new HashSet<User>();public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<User> getUsers() {return users;}public void setUsers(Set<User> users) {this.users = users;}@Overridepublic String toString() {return "Role [id=" + id + ", name=" + name + "]";}}

2.3. 新建User.java

package com.bjbs.pojo;import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;@Entity // 指定该类是实体类
@Table(name = "t_user") // 指定数据库表名(表名和实体类对应)
public class User implements Serializable {private static final long serialVersionUID = 1L;@Id // 指定为主键@GeneratedValue(strategy = GenerationType.IDENTITY) // 指定主键生成策略@Column(name = "id") // 指定表中列名(列名和属性名对应)private Integer id;@Column(name = "name")private String name; // 用户名@ManyToOne(cascade=CascadeType.PERSIST)// @JoinColumn: 就是维护一个外键@JoinColumn(name="r_id")private Role role;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Role getRole() {return role;}public void setRole(Role role) {this.role = role;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + "]";}}

2.4. 新建UserRepository.java

package com.bjbs.dao;import org.springframework.data.jpa.repository.JpaRepository;
import com.bjbs.pojo.User;/*** 参数一T: 当前需要映射的实体; 参数二 T: 当前映射的实体中的id的类型*/
public interface UserRepository extends JpaRepository<User, Integer> {}

2.5. 新建TestUserRepository.java

package com.bjbs.test;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.bjbs.dao.UserRepository;
import com.bjbs.pojo.Role;
import com.bjbs.pojo.User;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestUserRepository {@Autowiredprivate UserRepository userRepository;@Testpublic void findOne() {User user = userRepository.findOne(2);System.out.println(user);Role role = user.getRole();System.out.println(role);}@Testpublic void save() {// 新建用户User user = new User();user.setName("翠花");// 新建角色Role role = new Role();role.setName("测试人员");// 建立关系role.getUsers().add(user);user.setRole(role);// 保存用户userRepository.save(user);}
}

2.6. 在src下新建application.properties

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.25.138:3306/StudyMybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=lyw123456

2.7. 在src下新建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 配置读取properties文件的工具类 --><context:property-placeholder location="classpath:application.properties" /><!-- 配置c3p0数据库连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="jdbcUrl" value="${spring.datasource.url}" /><property name="driverClass" value="${spring.datasource.driverClassName}" /><property name="user" value="${spring.datasource.username}" /><property name="password" value="${spring.datasource.password}" /></bean><!-- Spring整合JPA 配置EntityManagerFactory --><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource" /><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><!-- hibernate相关的属性的注入 --><!-- 配置数据库类型 --><property name="database" value="MYSQL" /><!-- 正向工程 自动创建表 --><!-- <property name="generateDdl" value="true" /> --><!-- 显示执行的SQL --><property name="showSql" value="true" /></bean></property><!-- 扫描实体的包 --><property name="packagesToScan"><list><value>com.bjbs.pojo</value></list></property></bean><!-- 配置Hibernate的事务管理器 --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /></bean><!-- 配置开启注解事务处理 --><tx:annotation-driven transaction-manager="transactionManager" /><!-- 配置springIOC的注解扫描 --><context:component-scan base-package="com.bjbs.service" /><!-- Spring Data JPA 的配置 --><!-- base-package: 扫描dao接口所在的包 --><jpa:repositories base-package="com.bjbs.dao" />
</beans>

2.8. 查询一个用户

2.9. 保存一个用户

010_Spring Data JPA一对多关系相关推荐

  1. spring boot Jpa 一对多关系维护 @OneToMany

    业务中经常会出现对象有一对多的关系,如 小明有多张银行等. 表结构如下: 注意这里我没有指定外键关系. 如果要持久化这些对象,按照以往的做法先生成小明,赋予ID,再将这个ID设置为在银行卡的外键. 但 ...

  2. 011_Spring Data JPA多对多关系

    1. 多对多的关联关系 1.1. 权限和用户是多对多的关联关系 权限类(对应表名: t_auth): 多方 角色类(对应表名: t_role): 多方 权限角色类(对应表名: t_auth_role) ...

  3. Spring Data JPA是什么?以及简单的使用(联表查询)

    Spring Data学习网站(下载gitHub工程学习) Spring Boot JPA 使用教程 - fishpro - 博客园 Spring Data JPA是什么?以及相关概述 首先Sprin ...

  4. Spring data JPA -针对一对多关系中,分页查询一的一方部分,但查询条件中有多的一方参数

    jpa框架让大家快速实现增删查改,真是太方便了.但是针对以下这个场景大家需要注意一下,我们项目中真实用到的,记录下来分享给大家. Account 和AccountDetail 是一对多关系,正常针对A ...

  5. 【Spring Data JPA自学笔记五】一对多、多对多和级联

    文章目录 数据库表的关系 一对多 多对多 Spring Data JPA实现一对多 基本配置 实现一对多 放弃维护权 Spring Data JPA实现多对多 基本配置 实现多对多 级联 之前的所有操 ...

  6. jpa 多层嵌套一对多_OpenJPA-嵌套的一对多关系合并问题

    将其发布在这里是因为我在这里没有太大的兴趣:http : //www.java- forums.org/jpa/96175-openjpa-one-many-within-one-many-merge ...

  7. Spring Data JPA教程:获取所需的依赖关系

    在创建使用Spring Data JPA的应用程序之前,我们需要获取所需的依赖关系. 这篇博客文章标识了必需的组件,并描述了如何使用Maven获得它们. 让我们开始吧. 其他阅读:如果您不熟悉Spri ...

  8. 009_Spring Data JPA一对一关系

    1. 一对一的关联关系 1.1. 人和身份证是一对一的关联关系 人类(对应表名: t_people): 一方 身份证类(对应表名: t_icard): 一方 1.2. 身份证表 1.3. 人类表 2. ...

  9. spring data jpa 详解

    2019独角兽企业重金招聘Python工程师标准>>> 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JP ...

最新文章

  1. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
  2. 【linux】Valgrind工具集详解(六):使用Valgrind gdbserver和GDB调试程序
  3. PHP RSA2加密和解密以及接口签名和验签
  4. 【算法竞赛学习】气象海洋预测-Task4 模型建立之 TCNN+RNN
  5. java任务分支和合并_合并/分支战略
  6. 【数学】Element Swapping
  7. php控制器的作用,控制器定义 · ThinkPHP5.0完全开发手册 · 看云
  8. oSIP开发者手册 (四)
  9. python中int什么意思_python3中int(整型)的使用教程
  10. 全局配置_中兴天机配置公布:智汇屏+全局黑暗模式
  11. c语言中char与static
  12. ad19原理图标注_Altium Designer 19绘制stm32最小系统原理图库及原理图
  13. vue项目无法启动,谷歌浏览器报:您与此网站之间建立的连接不安全,实际是cdn服务器过期
  14. 嵌入式设备查看系统的版本、编译时间、架构等信息(uname命令)
  15. 21级计科专业计算机组成原理实验一报告
  16. [数字图像处理]图像复原--逆滤波
  17. 机器学习 之 Kmeans聚类
  18. Oracle 更改字段的部分值
  19. 基于SSM框架的百度人脸识别
  20. java版b2b2c o2o 多租户多商家电子商务之(商家管理)SpringCloud SpringBoot Mybatis Uniapp 分布式商城源码 电子商务源码 社交电商 直播带货

热门文章

  1. 《C++覆辙录》——1.9:使用糟糕的语言
  2. shell脚本:一键安装LAMP、LNMP脚本
  3. 获取前台HTML控件的值(select)
  4. ASP获取地址栏URL地址方法
  5. MPLS/×××分解:防止PE-CE的路由环路
  6. 如何保证Linux服务器的安全
  7. 嵌入式开发/调试辅助工具
  8. 云数据保护需要增强应对复杂环境的能力
  9. 平时少用到的sql query
  10. 第四周课程总结实验报告(二)