Spring Data是Spring 社区的一个子项目,主要用于简化数据(关系型&非关系型)访问,其主要目标是使得数据库的访问变得方便快捷。目前支持的关系型与非关系型数据有Spring data JPA、Mongodb、Redis、JDBC、Elasticsearch….具体可查看Spring官网[1]JPA全称为Java Persistence API(Java持久层API),它是Sun公司在JavaEE 5中提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具,来管理Java应用中的关系数据,JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。很多ORM框架都是实现了JPA的规范,如:Hibernate、EclipseLink。Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率。
SpringBoot集成Spring-data-jpa
引入JPA依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--以操作Mysql数据库为例,引入Mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
jpa与Mysql配置
spring.hibernate.ddl-auto配置介绍:
-
create:每次删除上次的表,根据model重新生成新表,一般用于测试,会丢失数据。[删除-创建-操作] -
create-drop:每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。[删除-创建-操作-再删除] -
update: 最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了,但表中的行仍然存在,不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。[没表-创建-操作 | 有表-更新没有的属性列-操作] -
validate: 每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。[启动验证表结构,验证不成功,项目启动失败]
spring:
datasource:
url: jdbc:mysql://localhost:3306/mytestdb?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 1234523!@#
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: create
#设置数据库方言
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
#打印sql
show-sql: true
关于数据库表映射的注解
-
@Entity: 指定映射的表名 -
@Id:指定主键 -
@GeneratedValue:主键生成策略 -
@Column: 指定映射的列名 -
@Temporal: 关于时间的精度 -
@Transient: 实体类忽略映射的字段
@Entity(name = "tb_user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDO implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name",nullable = false)
String userName;
String account;
String passwd;
int age;
boolean forbidden;
@Temporal(value = TemporalType.TIMESTAMP)
Date loginTime;
@Transient
String token;
}
增删改查
是不是很简单??? 只要继承JpaRepository就能通过UserRepository实现对一个实体的CURD操作。
@Repository
public interface UserRepository extends JpaRepository<UserDO,Long> {
}
分页、排序、自定义语句查询
@Repository
public interface UserRepository extends JpaRepository<UserDO,Long> {
@Query("from tb_user u where u.userName like :userName")
Page<UserDO> findUserDOByUserName(@Param("userName")String userName,
Pageable pageable);
Page<UserDO> findAll(Pageable pageable, Sort sort);
}
//使用方法
Pageable pageable= PageRequest.of(0,10);
Page<UserDO> pageUsers=userRepository.findAll(pageable,Sort.by("age")
.ascending().and(Sort.by("userName").descending()));
List<UserDO> users=pageUsers.getContent();
int totalPages= pageUsers.getTotalPages();
方法命名规则查询
@Repository
public interface UserRepository extends JpaRepository<UserDO,Long> {
List<UserDO> findUserDOByAccountAndAgeAndUserNameLike(String account,int age,String userName);
}
更多使用方法:Jpa官方文档地址:https://docs.spring.io/spring-data/jpa/docs/2.3.2.RELEASE/reference/html/#reference
千里之行,始于足下。这里是SpringBoot教程系列第六篇,所有项目源码均可以在我的GitHub[2]上面下载源码。
参考资料
Spring官网: https://spring.io/projects/spring-data
[2]
GitHub: https://github.com/mytianya/springboot-tutorials
原文始发于微信公众号(编程异次元):springboot2.x基础教程:集成spring-data-jpa
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/235332.html