如何在 Spring Boot 中 读写数据 1.2 JPA 规范 ORM映射元数据:JPA支持XML和注解两种元数据形式。...这个依赖不仅会引入 Spring Data JPA ,还会传递性地将 Hibernate 作为 JPA 实现引入进来。...(3)@Id 类变量注解,用于指定主键。 (4)@GeneratedValue 类变量注解,用于指定主键的生成策略。 它包含strategy属性,具体说明如下: ?...的组合体。 (2)@OneToMany 在分析用户与部门之间关系时,会发现一个用户只能属于一个部门,而一个部门可以包含有多个用户。...多对多关系一般通过创建中间表来进行关联,这时就会用到 @JoinTable注解。
--spring 和 spring data jpa的配置--> <!...注解,表明多对多的关系 @JoinTable表示配置中间表,name表示中间表的名称,joinColumns配置的是当前对象在中间表中的外键,name值得值中间表的主键,referencedColumnName...,name值得值中间表的主键,referencedColumnName当前类对应表的主键 inverseJoinColumns:对方对象在中间表的外键 */ @ManyToMany(targetEntity...,3张表中都有数据,user和role关联关系建立 同时在user和role两侧建立关联关系 @Test @Transactional @Rollback(false) public void testSave1...,因为role在执行往中间表执行insert操作时表中已经存在了user插入的数据,所以出现了主键冲突的报错 因此需要user和role一方放弃维护权,修改Role实体类中关联关系,mappedBy
SpringDataJPA的基础概念和注解 一 JPA的介绍 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系...所以JPA仅仅是一种规范,通过定义通用的接口屏蔽实现层的差异 spirng data jpa是spring提供的一套简化JPA开发的框架,可以理解为 JPA 规范的再次封装抽象 二 Spring Data...JPA注解 查询相关注解 @NoRepositoryBean 添加了该注解的 repository 接口不会在运行时被创建实例,只会作为其他接口的父接口而被使用 @Modifying (1)可以通过自定义的...里的@Column设置都将不起作用 JPA规范中对@Lob注解并没有说明不能同时标注@Column注解,但是在实际使用中Hibernate JPA不支持这中标注方式 @Id @Id 标注用于声明一个实体类的属性映射为数据库的主键列...one2one关系,关系维护端的主键作为外键指向关系被维护端的主键,不再新建一个外键列 元数据属性说明: name:列名。
SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为数据访问方案的代码量,你仅仅需要编写一个接口集成下SpringDataJPA...前言 本篇文章引导你通过Spring Boot,Spring Data JPA和MySQL实现many-to-many关联映射。...,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字。...该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成 @GeneratedValue 指定主键的生成策略。...Data JPA包含了一些内置的Repository,实现了一些常用的方法:findone,findall,save等。
=true #通过 jpa 自动生成数据库中的表 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect...使用上述实体类的注解,当运行项目的时候就会在数据库中生成一个表名是 stu 的表。 类的继承分析 下面来研究一下类之间存在继承关系的时候,jpa 又是如何处理继承关系的呢?...类之间的关系分析 在数据库当中表和表之间都是有一定的关联关系的,jpa 是如何在实体类之间建立和数据库表中类似的关联关系呢?...,通常是需要第三种表去维护彼此的关系,这里使用了 @JoinTable 注解来定义第三种表的表名,属性字段等等。...jpa 使用 sql 增删改查 有时候我们不习惯使用上述的关键字去操作数据,就是喜欢写 sql , spring data jpa 也是支持写 sql 语句的,如何使用呢?
SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为数据访问方案的代码量,你仅仅需要编写一个接口集成下SpringDataJPA...前言 本篇文章引导你通过Spring Boot,Spring Data JPA和MySQL实现many-to-many关联表存在额外字段下关系映射。...,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字。...该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成 @GeneratedValue 指定主键的生成策略。...Data JPA包含了一些内置的Repository,实现了一些常用的方法:findone,findall,save等。
1.什么是jpa 假如学过hibernate在jpa会发现非常的简单,因为是同一个人写的,jpa是第三方orm框架的一种规范,hibernate作为jpa 的一个子集 2.需要导入的jar 这里使用的是...hibernate作为orm 待续重写整个部分 3.jpa的配置简要说明 新建–jpa项目(自动生成jpa项目的xml文件) persistence.xml,文件的名称是固定的,然后是根据name=”...注解指定序列名,MySql 不支持这种方式,TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。...(name="ITEM_CATEGORY", //@JoinTable 来映射中间表,name 指向中间表的名字,多对多是基于外表的 joinColumns={@JoinColumn...备注:其它基本上与hql一致,个人还是写sql写的比较多,然后使用类的方式也有//类找表 8.spring整合jpa <?xml version="1.0" encoding="UTF-8"?
Data JPA:Spring Data JPA 是spring data 项目下的一个模块。...这个表 @Id 表示当前属性作为该表的主键 @GeneratedValue(strategy=GenerationType.IDENTITY) 配合@Id一起使用,表示令当前主键自增 @Column(name...@JoinColumn(name=“roles_id”) 在本表创建roles_id 这个栏位开启外键并维护这个外键一般与级联操作的属性同时出现 @JoinTables 映射中间表信息,配置在哪一侧都可以...,多对多joinColumns: 当前表主键所关联的中间表中的外键字段inverseJoinColumns :建立另一张表在中间表中的外键字段 举例: @JoinTable(name=“t_roles_menus...:建立当前表在中间表中的外键字段 //inverseJoinColumns :建立另一张表在中间表中的外键字段 @JoinTable(name="t_roles_menus",joinColumns
用于表示该属性作为ID主键 @GeneratedValue 主键生成策略,@GeneratedValue(strategy=GenerationType.AUTO)表示主键自增长由实现jpa的框架来控制...给作为新的主键,这种方式效率比较低 SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列 IDENTITY:主键增长有数据来维护,可能不同数据库有不同的策略 @Column...默认为FetchType.EAGER cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作 targetEntity...例如,实体Order有一个user属性来关联实体User,则Order的user属性为一个外键, 其默认的名称为实体User的名称+下划线+实体User的主键名称 @JoinTable(name =...可以将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解 @Embedded @Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.
Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor...多表之间的关系和操作多表的操作步骤 表关系 一对一 一对多: 一的一方:主表 多的一方:从表 外键:需要再从表上新建一列作为外键...@JoinTable 作用:针对中间表的配置 属性: nam:配置中间表的名称 joinColumns:中间表的外键字段关联当前实体类所对应表的主键字段 inverseJoinColumn...:中间表的外键字段关联对方表的主键字段 @JoinColumn 作用:用于定义主键字段和外键字段的对应关系。...targetEntity 对方实体类字节码 2.配置中间表(包含两个外键) JoinTable name:中间表的名称
##validate 加载hibernate时,验证创建数据库表结构 ##create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。...##create-drop 加载hibernate时创建,退出是删除表结构 ##update 加载hibernate自动更新数据库结构 ##validate...启动时验证表的结构,不会创建表 ##none 启动时不做任何操作 spring.jpa.hibernate.ddl-auto=update ##控制台打印sql spring.jpa.show-sql...=true # 建议在开发时关闭缓存,不然没法看到实时页面 spring.thymeleaf.cache=false ##去除thymeleaf的html严格校验 spring.thymeleaf.mode...//FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载 @JoinTable(name = "SysUserRole", joinColumns
4.2 表关系建立 多对多的表关系建立靠的是中间表,其中用户表和中间表的关系是一对多,角色表和中间表的关系也是一对多,如下图所示: ?...@JoinTable 作用:针对中间表的配置 属性: nam:配置中间表的名称 joinColumns:中间表的外键字段关联当前实体类所对应表的主键字段...inverseJoinColumn:中间表的外键字段关联对方表的主键字段 @JoinColumn 作用:用于定义主键字段和外键字段的对应关系。.../** * 需求: * 保存用户和角色 * 要求: * 创建2个用户和3个角色 * 让1号用户具有1号和2号角色(双向的) * 让2号用户具有2号和3号角色(双向的)...都会往中间表插入数据,中间表的2个字段又作为联合主键,所以报错,主键重复,解决保存失败的问题:只需要在任意一方放弃对中间表的维护权即可,推荐在被动的一方放弃,配置如下: //放弃对中间表的维护权,解决保存中主键冲突的问题
JPA(Hibernate是jpa的实现) jpa是对实体类操作,从而通过封装好的接口直接设置数据库的表结构。...>spring-boot-starter-data-jpa 设置配置yaml spring: jpa: #开启SQL语句执行日志信息...在本表中创建detail_id,并外键连接AccountDetail表的主键id @OneToOne //声明为一对一关系 AccountDetail detail;...@JoinColumn(name = "tid") //存储教师ID的字段,和一对一是一样的,也会在当前表中创个外键tid,对应Teacher表的主键 Teacher teacher; //执行的代码...,并在当前表中创建tid字段作为外键连接关联表的tid ) List teacher; 接着,JPA会自动创建一张中间表,并自动设置外键,我们就可以将多对多关联信息编写在其中了。
总的来说,JPA包括以下3方面的技术: ORM映射元数据 JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; API 用来操作实体对象...查询语言 这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合 使用H2工程 因为我们使用JPA和H2,所以我们需要同时添加这两个依赖,同时为了偷懒...*********** #创建表的MySql语句位置 spring.datasource.schema=classpath:schema.sql #插入数据的MySql语句的位置 spring.datasource.data....Driver 有两个配置是用来初始化我们的数据库的 #创建表的MySql语句位置 spring.datasource.schema=classpath:schema.sql #插入数据的MySql语句的位置...,两边的表都创建了 说明jpa也会自动建表的(在扫描到@Entity)的时候 测试接口 目前没有数据,我们在控制台添加几条 ---- 重新测试接口 新增操作 /** * 测试jpa的新增
@EnableAutoConfiguration指示 Spring Boot 根据类路径设置、其他 bean 和各种属性设置开始添加 bean,同时@ComponentScan允许 spring 在包中查找其他组件...如上所述,这向 Spring Boot 自动配置表明一个类是一个可能包含 bean 定义的配置类。...JPA 将知道 POJO 类可以存储在数据库中。如果我们没有定义@Table注解,Spring config 将假定这个实体被映射到一个类似于 POJO 类名的表。...它是一个定义数据如何通过网络发送的对象。DTO 仅用于传递数据,不包含任何业务逻辑。 TYPE Java @Annotations 有时,我们需要通过 JSON 在实体之间传输数据。...操作被认为是路径和 HTTP 方法的唯一组合。只有带有注释的方法@ApiOperation才会被扫描并添加到 API 声明中。一些处理程序或操作需要使用事务来确保数据完整性和一致性。
作为规范,Java Persistence API关注持久性,它将Java对象的创建过程和具体的创建形式解耦。并非所有Java对象都需要持久化,但大多数应用程序都会保留关键业务对象。...虽然您可以手动配置JPA,但许多开发人员选择使用Spring的开箱即用支持。有关手动和基于Spring的JPA安装和设置的演示,请参阅下面的“ JPA安装和设置 ”。...通常,JPA足够灵活,可以适应您可能需要的任何持久性映射。 CRUD操作 将类映射到数据库表并建立其主键后,即可拥有在数据库中创建,检索,删除和更新该类所需的一切。...清单8显示了如何将EclipseLink作为Maven pom.xml文件中的依赖项包含在内。...如果您希望Spring为您的应用程序提供JPA支持,清单11显示了要包含的依赖项。
这篇文章我们来学习如何使用 Spring Boot 集成 Apache Shiro 。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。...2、判断用户是否被授予完成某个操作的权限 在非 Web 或 EJB 容器的环境下可以任意使用 Session API 可以响应认证、访问控制,或者 Session 生命周期中发生的事件 可将一个或以上用户安全数据源数据组合成一个复合的用户...Cryptography(加密):在对数据源使用加密算法加密的同时,保证易于使用。 还有其他的功能来支持和加强这些不同应用环境下安全领域的关注点。...注意: Shiro 不会去维护用户、维护权限,这些需要我们自己去设计/提供,然后通过相应的接口注入给 Shiro High-Level Overview 高级概述 在概念层,Shiro 架构包含三个主要的理念...private byte state;//用户状态,0:创建未认证(比如没有激活,没有输入验证码等等)--等待验证的用户 , 1:正常状态,2:用户被锁定.
Web支持——Apache Shiro拥有令人兴奋的web应用程序支持,允许您基于应用程序的url创建灵活的安全策略和网络协议(例如REST),同时还提供一组JSP库控制页面输出。...有了上面的对认证和授权的理解,我们先在合适的包下创建一个【MyRealm】类,继承 Shirot 框架的 AuthorizingRealm 类,并实现默认的两个方法: package com.wmyskxz.demo.realm...=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto...=update #显示SQL语句 spring.jpa.show-sql=true #不加下面这句则不会默认创建MyISAM引擎的数据库 spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect...#自己重写的配置类,默认使用utf8编码 spring.jpa.properties.hibernate.dialect=com.wmyskxz.demo.shiro.config.MySQLConfig
例如在“tb_generator”中将“gen_name”作为主键的键值 String pkColumnName() default ""; //属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加...1.2.1 hibernate 中提供的主键生成规则 在讲解 Hibernate 的主键生成策略之前,先来了解两个概念,即自然主键和代理主键,具体如下: 自然主键: 把具有业务含义的字段作为主键...,同时会清理一级缓存,这时会使用主键字段的值判断一级缓存中的对象和快照中的对象是否一致,如果两个对象中的属性发生变化,则执行 update 语句,将缓存的内容同步到数据库,并更新快照;如果一致,则不执行...5.4.2 @JoinTable 作用: 针对中间表的配置 属性: nam:配置中间表的名称 joinColumns:中间表的外键字段关联当前实体类所对应表的主键字段 inverseJoinColumn...都会往中间表插入数据,中间表的 2个字段又作为联合主键,所以报错,主键重复,解决保存失败的问题:只需要在任意一方放弃对中间表的维护权即可,推荐在被动的一方放弃,配置如下: @ManyToMany(mappedBy
这篇文章我们来学习如何使用Spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。...2、判断用户是否被授予完成某个操作的权限 在非 web 或 EJB 容器的环境下可以任意使用Session API 可以响应认证、访问控制,或者 Session 生命周期中发生的事件 可将一个或以上用户安全数据源数据组合成一个复合的用户...Cryptography(加密):在对数据源使用加密算法加密的同时,保证易于使用。 还有其他的功能来支持和加强这些不同应用环境下安全领域的关注点。...注意: Shiro不会去维护用户、维护权限,这些需要我们自己去设计/提供,然后通过相应的接口注入给Shiro High-Level Overview 高级概述 在概念层,Shiro 架构包含三个主要的理念...userinfo(用户信息表)、sysrole(角色表)、syspermission(权限表)、sysuserrole(用户角色表)、sysrole_permission(角色权限表)这五张表,为了方便测试我们给这五张表插入一些初始化数据
领取专属 10元无门槛券
手把手带您无忧上云