随笔分类 -  Spring-Data-Jpa

摘要:使用之前配置的两个DataSource,配置类如下: MultiDataSourceApplication: /** * 启动类 * @author caofanqi */ @EnableAsync @SpringBootApplication @EnableTransactionManagemen 阅读全文
posted @ 2020-01-09 23:50 caofanqi 阅读(1332) 评论(0) 推荐(0)
摘要:1、@EnableTransactionManagement 该注解用于启用Spring的注释驱动事务管理功能,用于@Configuration类。配置后会负责注册必要的Spring组件,为注解驱动事务管理提供动力。例如TransactionInterceptor和基于代理或AspectJ的通知,在 阅读全文
posted @ 2020-01-09 23:38 caofanqi 阅读(1432) 评论(0) 推荐(0)
摘要:1、SpringBoot 2.2.x默认使用的DataSource SpringBoot 2.2.x版本,默认使用的DataSource是HikariCP,可以直接通过注入DataSource,并打印出打印全限定名,可以查看。 或可以通过查看自动配置源码,来找到: @SpringBootApplic 阅读全文
posted @ 2020-01-09 23:24 caofanqi 阅读(5299) 评论(0) 推荐(0)
摘要:1、在使用SpringBoot项目的时候,我们只需要添加spring-boot-starter-data-jpa的依赖就可以使用了。其实是spring-boot-autoconfigure帮我们做好了,在该jar包下的META-INF中spring.factories中可以找到org.springf 阅读全文
posted @ 2019-12-27 17:36 caofanqi 阅读(9351) 评论(0) 推荐(0)
摘要:1、持久化上下文 JPA中有持久化上下文存在,但是开发者不直接与之打交道,持久化上下文在应用程序中是透明的。 我们可以把持久化上下文理解成一个Map,该Map在事务开始的时候创建,在事务结束的时候销毁。在事务中,可以把对象关联到持久化上下文中,比如说findById方法,在查出来的时候,这个对象就跟 阅读全文
posted @ 2019-12-26 17:55 caofanqi 阅读(1652) 评论(0) 推荐(0)
摘要:前面学习过@MappedSuperclass,可以把一些公共的属性提取到添加该注解的类里,如id,creteTime,updateTime等。该类不会生成表,该类中相应的字段都会生成在子类中。该类没有被@Entity注释,不是一个实体。 @Inheritance JPA为我们提供了@Inherita 阅读全文
posted @ 2019-12-25 16:51 caofanqi 阅读(6715) 评论(0) 推荐(2)
摘要:Spring-Data还提供了Web模块的支持,这要求Web组件Spring-MVC的jar包位于classpath下。通常通过使用@EnableSpringDataWebSupport注解来启用继承支持。 SpringDataWebAutoConfiguration上已经添加了@EnableSpr 阅读全文
posted @ 2019-12-16 22:40 caofanqi 阅读(1280) 评论(0) 推荐(0)
摘要:1、问题场景 以用户账户为例,如果允许同时对某个用户的账户进行修改的话,会导致某些修改被覆盖,使最后的结果不正确。 如:1.1、张三的账户中有100元。 1.2、张三的账户消费了50元。 1.3、张三的账户充值了100元。 我们希望的张三账户最终的结果是150元。如果1.2、1.3是并发执行的,按下 阅读全文
posted @ 2019-12-08 17:40 caofanqi 阅读(5036) 评论(0) 推荐(0)
摘要:1、Auditing 一般我们针对一张表的操作需要记录下来,是谁修改的,修改时间是什么,Spring-Data为我们提供了支持。 1.1、在实体类中使用Spring-Data为我们提供的四个注解(也可以选择实现Auditable接口或继承AbstractAuditable类,推荐使用注解) 1.2、 阅读全文
posted @ 2019-12-06 17:42 caofanqi 阅读(2602) 评论(0) 推荐(1)
摘要:有些时候,我们需要自定义Repository实现一些特殊的业务场景。 1、自定义单个Repository 1.1、首先提供一个片段接口和实现(接口的实现默认要使用Impl为后缀,实现本身不依赖spring-data,可以是常规的spring-bean,所以可以注入其他的bean,例如JdbcTemp 阅读全文
posted @ 2019-12-03 01:59 caofanqi 阅读(1705) 评论(0) 推荐(1)
摘要:1、JpaSpecificationExecutor JPA2引入了一个criteria API,我们可以使用它以编程的形式构建查询。通过编写criteria,动态生成query语句。JpaSpecificationExecutor是Spring-Data-JPA为我们执行基于JPA criteri 阅读全文
posted @ 2019-12-02 20:48 caofanqi 阅读(2682) 评论(0) 推荐(0)
摘要:Spring-Data数据查询方法的返回通常的是Repository管理的聚合根的一个或多个实例。但是,有时候我们只需要返回某些特定的属性,不需要全部返回,或者只返回一些复合型的字段。Spring-Data允许我们对特定的返回类型建模,以便更有选择的检索托管聚合的部分视图。 1、基于接口的投影 查询 阅读全文
posted @ 2019-11-24 21:07 caofanqi 阅读(3926) 评论(0) 推荐(0)
摘要:1、抓取策略 在前面说到的关联关系注解中,都有一个fetch属性,@OneToOne、@ManyToOne中都默认是FetchType.EAGER,立即获取。@OneToMany、@ManyToMany默认值是FetchType.LAZY,延迟获取。这些注解的的fetch属性定义的是合适获取,至于如 阅读全文
posted @ 2019-11-21 00:44 caofanqi 阅读(3746) 评论(2) 推荐(1)
摘要:1、@Query 对于少量的查询,使用@NamedQuery在实体上声明查询是一种有效的办法,并且可以很好的工作。由于查询本身绑定到执行它们的java方法,实际上可以通过Spring-Data-Jpa提供的@Query注解来直接绑定它们,而不是将它们注释到domain类。这将domain类从持久化特 阅读全文
posted @ 2019-11-17 17:53 caofanqi 阅读(4528) 评论(0) 推荐(0)
摘要:1、@NamedQuery、@NamedNativeQuery @NamedQuery与@NamedNativeQuery都是定义查询的一种形式,@NamedQuery使用的是JPQL,而@NamedNativeQuery使用的是原生SQL。这两种不常用,所以简单介绍一下。 使用方法: 1.1、在实 阅读全文
posted @ 2019-11-14 23:40 caofanqi 阅读(6056) 评论(0) 推荐(0)
摘要:1、查询策略 spring-data一共有三种方法查询策略: QueryLookupStrategy.Key.CREATE,尝试根据方法名进行创建。通用方法是从方法名中删除一组特定的前缀,然后解析该方法的其余部分。如果方法名不符合规则,则抛出异常。 QueryLookupStrategy.Key.U 阅读全文
posted @ 2019-11-14 02:54 caofanqi 阅读(932) 评论(0) 推荐(0)
摘要:之前我们学习的Repository都是Spring-Data为了兼容NoSQL而进行的一些抽象封装,从JpaRepository开始是对关系型数据库进行抽象封装。JpaRepository位于spring-data-jpa项目下的repository包中,继承了PagingAndSortingRep 阅读全文
posted @ 2019-11-12 22:50 caofanqi 阅读(1049) 评论(0) 推荐(0)
摘要:1、spring-data-commons项目 spring-data-commons项目是所有spring-data项目的核心,我们来看一下该项目下的repository包中的接口和注解。 2、Repository<T,ID>接口和@RepositoryDefinition注解 当中最重要的就是R 阅读全文
posted @ 2019-11-10 19:05 caofanqi 阅读(3773) 评论(0) 推荐(0)
摘要:1、场景一:地址信息(省、市、县、详细地址)在很多实体中都需要,比如说作者有地址,订单也有地址,但是他们的地址并不能独立与他们存在,所以地址不能映射为实体,那么我们就需要在作者实体和订单实体中都添加这些地址信息。这时如果我们想要在地址信息中添加一个邮编,就需要在每一个用到地址的实体中都添加邮编字段, 阅读全文
posted @ 2019-11-07 14:28 caofanqi 阅读(2499) 评论(0) 推荐(0)
摘要:1、首先在Entity实体中,命名方式有两种; 一种是显示命名,即通过@Table的name属性指定对应的数据库表名称,@Column的name属性指定实体字段对应数据库字段的名称。 另一种是隐式命名,显示命名一般不是必要的,所以可以不设置名称,交给框架来进行隐式命名。2、Naming命名策略 我们 阅读全文
posted @ 2019-11-06 23:47 caofanqi 阅读(4178) 评论(0) 推荐(0)