010_Spring Data JPA一对多关系
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一对多关系相关推荐
- spring boot Jpa 一对多关系维护 @OneToMany
业务中经常会出现对象有一对多的关系,如 小明有多张银行等. 表结构如下: 注意这里我没有指定外键关系. 如果要持久化这些对象,按照以往的做法先生成小明,赋予ID,再将这个ID设置为在银行卡的外键. 但 ...
- 011_Spring Data JPA多对多关系
1. 多对多的关联关系 1.1. 权限和用户是多对多的关联关系 权限类(对应表名: t_auth): 多方 角色类(对应表名: t_role): 多方 权限角色类(对应表名: t_auth_role) ...
- Spring Data JPA是什么?以及简单的使用(联表查询)
Spring Data学习网站(下载gitHub工程学习) Spring Boot JPA 使用教程 - fishpro - 博客园 Spring Data JPA是什么?以及相关概述 首先Sprin ...
- Spring data JPA -针对一对多关系中,分页查询一的一方部分,但查询条件中有多的一方参数
jpa框架让大家快速实现增删查改,真是太方便了.但是针对以下这个场景大家需要注意一下,我们项目中真实用到的,记录下来分享给大家. Account 和AccountDetail 是一对多关系,正常针对A ...
- 【Spring Data JPA自学笔记五】一对多、多对多和级联
文章目录 数据库表的关系 一对多 多对多 Spring Data JPA实现一对多 基本配置 实现一对多 放弃维护权 Spring Data JPA实现多对多 基本配置 实现多对多 级联 之前的所有操 ...
- jpa 多层嵌套一对多_OpenJPA-嵌套的一对多关系合并问题
将其发布在这里是因为我在这里没有太大的兴趣:http : //www.java- forums.org/jpa/96175-openjpa-one-many-within-one-many-merge ...
- Spring Data JPA教程:获取所需的依赖关系
在创建使用Spring Data JPA的应用程序之前,我们需要获取所需的依赖关系. 这篇博客文章标识了必需的组件,并描述了如何使用Maven获得它们. 让我们开始吧. 其他阅读:如果您不熟悉Spri ...
- 009_Spring Data JPA一对一关系
1. 一对一的关联关系 1.1. 人和身份证是一对一的关联关系 人类(对应表名: t_people): 一方 身份证类(对应表名: t_icard): 一方 1.2. 身份证表 1.3. 人类表 2. ...
- spring data jpa 详解
2019独角兽企业重金招聘Python工程师标准>>> 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JP ...
最新文章
- python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
- 【linux】Valgrind工具集详解(六):使用Valgrind gdbserver和GDB调试程序
- PHP RSA2加密和解密以及接口签名和验签
- 【算法竞赛学习】气象海洋预测-Task4 模型建立之 TCNN+RNN
- java任务分支和合并_合并/分支战略
- 【数学】Element Swapping
- php控制器的作用,控制器定义 · ThinkPHP5.0完全开发手册 · 看云
- oSIP开发者手册 (四)
- python中int什么意思_python3中int(整型)的使用教程
- 全局配置_中兴天机配置公布:智汇屏+全局黑暗模式
- c语言中char与static
- ad19原理图标注_Altium Designer 19绘制stm32最小系统原理图库及原理图
- vue项目无法启动,谷歌浏览器报:您与此网站之间建立的连接不安全,实际是cdn服务器过期
- 嵌入式设备查看系统的版本、编译时间、架构等信息(uname命令)
- 21级计科专业计算机组成原理实验一报告
- [数字图像处理]图像复原--逆滤波
- 机器学习 之 Kmeans聚类
- Oracle 更改字段的部分值
- 基于SSM框架的百度人脸识别
- java版b2b2c o2o 多租户多商家电子商务之(商家管理)SpringCloud SpringBoot Mybatis Uniapp 分布式商城源码 电子商务源码 社交电商 直播带货