Spring Boot (三): ORM 框架 JPA 与连接池 Hikari
2020-12-13 14:37
标签:为什么 nfa icon ring 表数 commit equals persist collect 前面两篇文章我们介绍了如何快速创建一个 Spring Boot 工程《Spring Boot(一):快速开始》和在 Spring Boot 中如何使用模版引擎 Thymeleaf 渲染一个Web页面《Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面》,本篇文章我们继续介绍在 Spring Boot 中如何使用数据库。 数据库方面我们选用 Mysql , Spring Boot 提供了直接使用 JDBC 的方式连接数据库,毕竟使用 JDBC 并不是很方便,需要我们自己写更多的代码才能使用,一般而言在 Spring Boot 中我们常用的 ORM 框架有 JPA 和 Mybaties ,本篇文章我们要介绍的就是 JPA 的使用姿势。 说道使用 ORM 框架,就不得不顺便聊一下连接池,市面上很多成熟的数据库连接池,如 C3P0 、 Tomcat 连接池、 BoneCP 等等很多产品,但是我们为什么要介绍 Hikari ?这个要从 BoneCP 说起。 因为,传说中 BoneCP 在快速这个特点上做到了极致,官方数据是C3P0等的25倍左右。不相信?其实我也不怎么信。可是,有图有真相啊,传说图片来源于官网,然而笔者在官网并没有找到,大家看一下: 看起来是不是完全吊打,但是当 HikariCP 横空出世以后,这个局面就被完全改写了, BoneCP 被 HikariCP 完全吊打,看了一下 BoneCP Github 上面的版本更新,发现在2013年10月23日以后就再也没有更新过了,包括在仓库介绍上面都写着建议大家使用 HikariCP ,看来作者已经完全心灰意冷了。 Hikari 这个词来源于日文,是“光”的意思,估计作者的意思是这个连接池将会和光一样快,不知道作者是不是日本人。 HikariCP 的口号是快速,简单,可靠。不知道是否真的如它自己宣传的一样,官方又提供了一张图,大家感受一下,这张图来源于:https://github.com/brettwooldridge/HikariCP 。 更多有关 HikariCP 的信息,大家可以访问官方的 Github 仓库了解:https://github.com/brettwooldridge/HikariCP ,笔者这里不多做介绍,毕竟我们更关注的如何使用。 JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。 值得注意的是,JPA 是在充分吸收了现有 Hibernate,TopLink,JDO 等 ORM 框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看, JPA 受到了极大的支持和赞扬,其中就包括了 Spring 与 EJB3. 0的开发团队。 注意: JPA 是一套规范,不是一套产品,那么像 Hibernate,TopLink,JDO 他们是一套产品,如果说这些产品实现了这个 JPA 规范,那么我们就可以叫他们为 JPA 的实现产品。 Spring Boot JPA 是 Spring 基于 ORM 框架、 JPA 规范的基础上封装的一套 JPA 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率! Spring Boot JPA 让我们解脱了 DAO 层的操作,基本上所有 CRUD 都可以依赖于它来实现。 Spring Boot JPA 帮我们定义了很多自定义的简单查询,并且可以根据方法名来自动生成 SQL ,主要的语法是 具体的关键字,使用方法和生产成SQL如下表所示: 这里我们创建工程 spring-boot-jpa-hikari 。 代码清单:spring-boot-jpa-hikari/pom.xml 代码清单:spring-boot-jpa-hikari/src/main/resources/application.yml 注意: 有关 JPA 的配置有一点需要的, 有关 HikariCP 更多的配置可以参考源码类 代码清单:spring-boot-jpa-hikari/src/main/java/com/springboot/springbootjpahikari/model/UserModel.java unique : 唯一约束 主键生成策略为uuid 代码清单:spring-boot-jpa-hikari/src/main/java/com/springboot/springbootjpahikari/repository/UserRepository.java 代码清单:spring-boot-jpa-hikari/src/main/java/com/springboot/springbootjpahikari/controller/UserController.java 测试我们借助工具 PostMan ,启动工程,首先我们新增一个用户信息,如图: 如果我们参数中加入 id ,并且 id 的值和数据库中的 id 维持一致,这是会更新当前 id 的数据,如图: 我们执行查询操作,如图: 执行删除操作,如图: 至此,测试完成。 示例代码-Github 示例代码-Gitee https://github.com/brettwooldridge/HikariCP https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html Spring Boot (三): ORM 框架 JPA 与连接池 Hikari 标签:为什么 nfa icon ring 表数 commit equals persist collect 原文地址:https://www.cnblogs.com/babycomeon/p/11565843.html
1. 概述
2. JPA 介绍
findXXBy
, readAXXBy
, queryXXBy
, countXXBy
, getXXBy
后面跟属性名称:public interface UserRepository extends JpaRepository
Keyword
Sample
JPQL snippet
And
findByLastnameAndFirstname
… where x.lastname = ?1 and x.firstname = ?2
Or
findByLastnameOrFirstname
… where x.lastname = ?1 or x.firstname = ?2
Is,Equals
findByFirstname,findByFirstnameIs,findByFirstnameEquals
… where x.firstname = 1?
Between
findByStartDateBetween
… where x.startDate between 1? and ?2
LessThan
findByAgeLessThan
… where x.age
LessThanEqual
findByAgeLessThanEqual
… where x.age
GreaterThan
findByAgeGreaterThan
… where x.age > ?1
GreaterThanEqual
findByAgeGreaterThanEqual
… where x.age >= ?1
After
findByStartDateAfter
… where x.startDate > ?1
Before
findByStartDateBefore
… where x.startDate
IsNull
findByAgeIsNull
… where x.age is null
IsNotNull,NotNull
findByAge(Is)NotNull
… where x.age not null
Like
findByFirstnameLike
… where x.firstname like ?1
NotLike
findByFirstnameNotLike
… where x.firstname not like ?1
StartingWith
findByFirstnameStartingWith
… where x.firstname like ?1 (parameter bound with appended %)
EndingWith
findByFirstnameEndingWith
… where x.firstname like ?1 (parameter bound with prepended %)
Containing
findByFirstnameContaining
… where x.firstname like ?1 (parameter bound wrapped in %)
OrderBy
findByAgeOrderByLastnameDesc
… where x.age = ?1 order by x.lastname desc
Not
findByLastnameNot
… where x.lastname ?1
In
findByAgeIn(Collection ages)
… where x.age in ?1
NotIn
findByAgeNotIn(Collection age)
… where x.age not in ?1
True
findByActiveTrue()
… where x.active = true
False
findByActiveFalse()
… where x.active = false
IgnoreCase
findByFirstnameIgnoreCase
… where UPPER(x.firstame) = UPPER(?1)
3. 工程实战
3.1 工程依赖 pom.xml
***
3.2 配置文件 application.yml
***server:
port: 8080
spring:
application:
name: spring-boot-jpa-hikari
jpa:
database: mysql
show-sql: true
generate-ddl: true
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://192.168.0.128:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
auto-commit: true
minimum-idle: 2
idle-timeout: 60000
connection-timeout: 30000
max-lifetime: 1800000
pool-name: DatebookHikariCP
maximum-pool-size: 5
spring.jpa.hibernate.ddl-auto
,这个属性需谨慎配置,它的几个值的含义对数据库来讲都是高危操作,笔者这里方便起见配置了 update
,各位读者请根据具体使用场景配置。
com.zaxxer.hikari.HikariConfig
,笔者这里仅简单配置了自动提交、超时时间、最大最小连接数等配置。3.3 映射实体类 UserModel.java
***@Entity
@Data
@Table(name = "user")
public class UserModel {
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
private String id;
@Column(nullable = true, unique = true)
private String nickName;
@Column(nullable = false)
private int age;
}
3.4 资源类 UserRepository.java
***public interface UserRepository extends JpaRepository
3.5 接口测试类 UserController.java
***@RestController
public class UserController {
@Autowired
UserRepository userRepository;
/**
* 查询用户列表
* @return
*/
@GetMapping("/user")
public List
4. 测试
5. 示例代码
6. 参考
下一篇:java获取下一天的日期
文章标题:Spring Boot (三): ORM 框架 JPA 与连接池 Hikari
文章链接:http://soscw.com/essay/34278.html