- 博客(294)
- 资源 (20)
- 收藏
- 关注
原创 DevPost 使用教程——比 Postman 更顺手的 DevTools 内置 API 客户端
DevPost 使用教程——比 Postman 更顺手的 DevTools 内置 API 客户端
2026-06-17 16:18:50
357
原创 Spring MVC 中文文档
Spring Web MVC是建立在Servlet API上的原始Web框架,从一开始就包含在Spring框架中。正式名称 “Spring Web MVC” 来自其源模块的名称( ),但它更常被称为 “Spring MVC”。与Spring Web MVC并行,Spring Framework 5.0引入了一个 reactive 技术栈的 Web框架,其名称 “Spring WebFlux” 也是基于其源模块( )。本章介绍了Spring Web MVC。下一章 将介绍Spring WebFlux。关于基线
2023-10-27 13:23:47
1045
1
原创 19 | 如何搞清楚事务、连接池的关系?正确配置是怎样的
第一步:新建一个 TransactionHelper 类,进行事务管理,代码如下。复制代码/*** 利用spring进行管理*/@Component/*** 利用spring 的机制和jdk8的function机制实现事务*/@Transactional(rollbackFor = Exception.class) //可以根据实际业务情况,指定明确的回滚异常第二步:直接在 service 中就可以使用了,代码如下。复制代码@Autowired==/**
2023-10-15 20:40:27
1911
原创 18 | 生产环境多数据源的处理方法有哪些
我们都知道 DataSource 的本质是获得数据库连接,而 AbstractRoutingDataSource 帮我们实现了动态获得数据源的可能性。下面还是通过一个例子看一下它是怎么使用的。第一步:定一个数据源的枚举类,用来标示数据源有哪些。复制代码/*** 定义一个数据源的枚举类*/DB1, //实际工作中枚举的语义可以更加明确一点;DB2;return e;return db1;//没找到的情况下,默认返回数据源1。
2023-10-15 20:38:24
461
原创 17 | DataSource 为何物?加载过程是怎样的
在实际工作中,由于 HikariCP 和 Druid 各有千秋,国内的很多开发者都使用 AliDruid 作为数据源,我们看看都是怎么配置的,每一步都很简单。第一步:引入 Gradle 依赖。复制代码第二步:配置数据源。复制代码spring.datasource.druid.url= # 或spring.datasource.url=spring.datasource.druid.username= # 或spring.datasource.username=
2023-10-15 20:37:16
1432
原创 16 | 如何自定义 HandlerMethodArgumentResolvers
在实际的工作中,你可能会遇到对老项目进行改版的工作,如果要我们把旧的 API 接口改造成 JPA 的技术实现,那么可能会出现需要新、老参数的问题。假设在实际场景中,我们 Page 的参数是 page[number],而 page size 的参数是 page[size],看看应该怎么做。第一步:新建 MyPageableHandlerMethodArgumentResolver。用来兼容?page[size]=2&page[number]=0 的参数情况;支持 JPA 新的参数形式?
2023-10-15 20:35:58
591
原创 15 | JPA 对 Web MVC 开发者做了哪些支持
正常情况下,我们开启 Spring Data 对 Spring Web MVC 支持的时候需要在 @Configuration 的配置文件里面添加 @EnableSpringDataWebSupport 这一注解,如下面这种形式:复制代码由于我们用了 Spring Boot,其有自动加载机制,会自动加载 SpringDataWebAutoConfiguration 类,发生如下变化:复制代码。
2023-10-15 20:34:20
853
原创 14 | 乐观锁机制和重试机制在实战中应该怎么用
乐观锁在实际开发过程中很常用,它没有加锁、没有阻塞,在多线程环境以及高并发的情况下 CPU 的利用率是最高的,吞吐量也是最大的。而 Java Persistence API 协议也对乐观锁的操作做了规定:通过指定 @Version 字段对数据增加版本号控制,进而在更新的时候判断版本号是否有变化。如果没有变化就直接更新;如果有变化,就会更新失败并抛出“OptimisticLockException”异常。我们用 SQL 表示一下乐观锁的做法,代码如下:复制代码。
2023-10-15 20:32:50
1617
原创 13 | 如何正确使用 @Entity 里面的回调方法
复制代码@Log4j2如果注释了,测试用例这个地方的验证也需要去掉@PreUpdate如果注释了,测试用例这个地方的验证也需要去掉@PreRemove@PostLoad//查询方法里面可以对一些敏感信息做一些日志我们上面注释的代码,也可以改变 entity 里面的值,但是在这个 Listener 的里面我们不做修改,所以把 setVersion 和 setCreateUserId 注释掉了,要注意测试用例里面这两处也需要修改。
2023-10-15 20:31:41
832
原创 12 | JPA 的审计功能解决了哪些问题
Auditing 是帮我们做审计用的,当我们操作一条记录的时候,需要知道这是谁创建的、什么时间创建的、最后修改人是谁、最后修改时间是什么时候,甚至需要修改记录……1.可以很容易地让我们写自己的 BaseEntity,把一些公共的字段放在里面,不需要我们关心太多和业务无关的字段,更容易让我们公司的表更加统一和规范,就是统一加上 @CreatedBy、@CreatedDate、@LastModifiedBy、@LastModifiedDate 等。而其他都不变,我们再跑一次刚才的测试用例,发现效果是一样的。
2023-10-15 20:30:19
903
原创 11 | JpaRepository 如何自定义
Java Persistence API 规定,操作数据库实体必须要通过 EntityManager 进行,而我们前面看到了所有的 Repository 在 JPA 里面的实现类是 SimpleJpaRepository,它在真正操作实体的时候都是调用 EntityManager 里面的方法。
2023-10-15 20:28:48
1612
原创 10 | JpaSpecificationExecutor 实现的原理是什么
我们可以自定义一个Specification 的实现类,它可以实现任何实体的动态查询和各种条件的组合。复制代码/*** 实现实体根据不同的字段、不同的Operator组合成不同的Predicate条件*/@Override} else {我们通过 `` 泛型,解决不同实体的动态查询(当然了,我只是举个例子,这个方法可以进行无限扩展)。我们通过 SearchCriteria 可以知道不同的字段是什么、值是什么、如何操作的,看一下代码:复制代码/**
2023-10-15 20:27:09
461
原创 09 | JpaSpecificationExecutor 解决了哪些问题
那么我们再看一下参数 ExampleSpecification 的源码,发现它是接口 Specification 的实现类,并且是非公开的实现类,可以通过接口对外暴露 and、or、not、where 等组合条件的查询条件。我们通过查看 JpaSpecificationExecutor 的 Structure 图会发现,方法就有这么几个,细心的同学这个时候会发现它的参数 Specification,正是我们分析 QueryByExampleExecutor 的原理时候使用的 Specification。
2023-10-15 20:25:27
648
原创 08 | Jackson 注解在实体里面如何应用?常见的死循环问题如何解决?
我们用 Spring Boot 里面默认集成的 fasterxml.jackson 加以说明,这看似和 JPA 没什么关系,但是一旦我们和 @Entity 一起使用的时候,就会遇到一些问题,特别是新手同学,我们这一课时详细介绍一下用法。先来跟着我了解一下 Jackson 的基本语法。
2023-10-13 18:51:01
1197
原创 07 | @Entity 之间的关联关系注解如何正确使用?
实体与实体之间的关联关系一共分为四种,分别为 OneToOne、OneToMany、ManyToOne 和 ManyToMany;而实体之间的关联关系又分为双向的和单向的。实体之间的关联关系是在 JPA 使用中最容易发生问题的地方,接下来我将一一揭晓并解释。我们先看一下 OneToOne,即一对一的关联关系。
2023-10-13 18:50:06
1694
原创 06 | @Entity 里面的 JPA 注解有哪些?在 Java 多态场景下如何使用?
前几课时我为你介绍了 Repository 的用法,其中我经常会提到“实体类”(即我们前面的 User 类),它是对我们数据库中表的 Metadata 映射,那么具体如何映射呢?这一课时我们来讲解。我们先看一下 Java Persistence API 里面都有哪些重要规定;再通过讲解基本注解,重点介绍一下联合主键和实体之间的继承关系,然后你就会知道 JPA 的实体里面常见的注解有哪些。话不多说,看一下 Entity 的相关规定。
2023-10-13 18:49:00
2207
原创 05 | @Query 解决了什么问题?什么时候应该选择它?
上面我介绍了 @Query 的基本用法,下面介绍一下 @Query 在我们的实际应用中最受欢迎的两处场景。
2023-10-13 18:47:42
1202
原创 04 | 如何利用 Repository 中的方法返回值解决实际问题?
官方给我们提供了自定义 Streamable 的方法,不过在实际工作中很少出现要自定义保证结果类的情况,在这里我简单介绍一下方法,看如下例子:复制代码(4)以上四个步骤介绍了自定义 Streamable 的方法,分别为:(1)Product 实体,公开 API 以访问产品价格。(2)Streamable`` 的包装类型可以通过 Products.of(…) 构造(通过 Lombok 注解创建的工厂方法)。(3)包装器类型在 Streamable`` 上公开了计算新值的其他 API。
2023-10-13 18:46:12
998
原创 03 | Defining Query Methods 的命名语法与参数
若想要实现 CRUD 的操作,常规做法是写一大堆 SQL 语句。但在 JPA 里面,只需要继承 Spring Data Common 里面的任意 Repository 接口或者子接口,然后直接通过方法名就可以实现,神不神奇?来看下面具体的使用步骤。第 1 步,User 实体的 UserRepository 继承 Spring Data Common 里面的 Repository 接口:复制代码第 2 步,对于 Service 层就可以直接使用 UserRepository 接口:复制代码。
2023-10-13 18:44:53
490
原创 02 | Spring Data Common 之 Repository 如何全面掌握?
本课时到这里就结束了,这一课时我讲解了 Repository 接口、CrudRepository 接口、PagingAndSortingRepository 接口、JpaRepository 接口的用法,通过源码我们知道了接口里面的方法有哪些、怎么实现的,也知道了 Spring 的动态代理机制是怎么运用到 UserRepository 接口的。
2023-10-13 18:43:33
795
原创 01 | Spring Data JPA 初识
JPA 是 JDK 5.0 新增的协议,通过相关持久层注解(@Entity 里面的各种注解)来描述对象和关系型数据里面的表映射关系,并将 Java 项目运行期的实体对象,通过一种Session持久化到数据库中。想象一下,一旦协议有了,大家都遵守了此种协议进行开发,那么周边开源产品就会大量出现,比如我们在后面要介绍的第 29 课时(Spring Data Rest 是什么?和 JPA 是什么关系?
2023-10-13 18:40:17
391
原创 【企业架构】企业架构师vs解决方案架构师vs领域架构师
企业架构被认为是通过信息技术获取竞争优势的关键途径之一。降低成本、增加灵活性和规范技术环境的需求越来越大。企业架构在概念上可以划分为不同的架构层,包括业务架构和IT架构(数据、应用程序和技术架构)。然后,解决方案体系结构接受一个问题,并提出构建块来解决它。它经常重用企业架构提供的其他元素(企业构建块、企业功能、架构标准和指导方针)因此,企业架构师在企业架构团队和组织的其他地方有许多不同的角色和职责。
2023-02-06 23:01:20
771
原创 XDocReport使用入门
XDocReport是GitHub上根据麻省理工学院许可证开源的Wrod导出框架。XDocReport可以根据ODT、Doc、Docx文档模板通过模板引擎语法(Freemarker、Velocity)转换为另外一种格式文档(Doc、Docx、XHTML、PDF)。
2022-12-24 17:16:29
11693
9
原创 OAuth 2.0设计规范
OAuth2.0接口设计规范说明OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务器提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
2022-05-20 15:26:55
2254
1
jarslink-demo
2018-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅