【Spring Data 系列学习】Spring Data JPA 基础查询
【Spring Data 系列学习】Spring Data JPA 基础查询
前面的章节简单讲解了 了解 Spring Data JPA 、 Jpa 和 Hibernate,本章节开始通过案例上手 Spring boot Jpa 。
spring data
Spring Data 库的核心接口是 Repository
。首先需要定义实体类的接口,接口必须继承 repository 并且输入实体类型和 ID 类型,如果需要用到 CRUD 方法,可以使用 CrudRepository
来替代 Repository
。除了 CrudRepository
还有 PagingAndSortingRepository
、JpaRepository
等。
我们用工具 IntelliJ IDEA,打开类 Repository.class
,默认快捷键 CTRL+H ,如图显示:
从上图我们可以看出继承关系,点击 JpaRepository
打开Navigate→File Structure,或者点击最左边的 Structure,可以查看此类的结构以及有哪些方法和继承类。
CrudRepository
:基本的 CRUD 方法。PagingAndSortingRepository
:继承CrudRepository
,并增加分页功能。JpaRepository
:继承PagingAndSortingRepository
和QueryByExampleExecutor
。
快速上手
创建一个 Spring boot 项目,创建项⽬在 Chapter1项⽬ pom.xml 加入需要使⽤的依赖,如下所示:
<!-- 引入 jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置文件application.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
# 打印 sql 语句
spring.jpa.show-sql= true
# 自动创建表
spring.jpa.properties.hibernate.hbm2ddl.auto=create
# 默认创建的mysql表为 MyISAM 引擎修改为InnoDB问题
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
spring.jpa.properties.hibernate.hbm2ddl.auto 参数说明:
- create:每次运行会先删除对应的表,通过实体类重新生成表。请勿再生产环境。
- create-drop:sessionFactory 关闭时会清空表中的数据。
- update:运行时如果没有表会自动创建表,只会更新表内数据不会请空数据。(推荐使用)
- validate:运行时验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
实体类映射数据库表
user 实体类
@Entity
public class User implements Serializable {
private static final long serialVersionUID = -390763540622907853L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
// 省略构造器 set/get
}
@Entity
定义对象将会成为被JPA管理的实体,将映射到指定的数据库表。
@Id
定义属性为数据库的主键,一个实体里面必须有一个。
@GeneratedValue(strategy = GenerationType.IDENTITY)
自增长 ID 策略
继承 CrudRepository
public interface UserCrudRepository extends CrudRepository<User, Long> {
}
CrudRepository<实体类,主键>
CURD 测试类
路径:src/test/java/com/mtcarpenter/repository/UserCrudRepositoryTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserCrudRepositoryTest {
/**
* ⽇志对象
*/
private Logger logger = LoggerFactory.getLogger(UserCrudRepositoryTest.class);
@Autowired
private UserCrudRepository userCrudRepository;
@Test
public void save() {
logger.info("新增数据 result = {}", userCrudRepository.save(new User("小米", 9)));
logger.info("新增数据 result = {}", userCrudRepository.save(new User("张三", 16)));
logger.info("新增数据 result = {}", userCrudRepository.save(new User("三哥", 12)));
logger.info("新增数据 result = {}", userCrudRepository.save(new User("米二", 8)));
}
@Test
public void edit() {
logger.info("编辑用户 result = {}", userCrudRepository.save(new User(3L, "三三", 16)));
}
@Test
public void delete() {
userCrudRepository.deleteById(3L);
}
@Test
public void findById() {
logger.info("通过 id 查询 result = {}",userCrudRepository.findById(1L));
}
@Test
public void findAll(){
logger.info("查询所有记录 result = {}",userCrudRepository.findAll());
}
}
输出日志:
Hibernate: insert into user (age, name) values (?, ?)
2020-02-29 13:18:36.809 INFO 48452 --- [ main] c.m.c.repository.UserCrudRepositoryTest : 新增数据 result = User{id=1, name='小米', age=9}
Hibernate: insert into user (age, name) values (?, ?)
2020-02-29 13:18:36.828 INFO 48452 --- [ main] c.m.c.repository.UserCrudRepositoryTest : 新增数据 result = User{id=2, name='张三', age=16}
Hibernate: insert into user (age, name) values (?, ?)
2020-02-29 13:18:36.848 INFO 48452 --- [ main] c.m.c.repository.UserCrudRepositoryTest : 新增数据 result = User{id=3, name='三哥', age=12}
Hibernate: insert into user (age, name) values (?, ?)
2020-02-29 13:18:36.861 INFO 48452 --- [ main] c.m.c.repository.UserCrudRepositoryTest : 新增数据 result = User{id=4, name='米二', age=8}
spring.jpa.show-sql= true
开启之后会在控制台输出 SQL 语句,在日常测试环境也能提高一定的开发效率。
【Spring Data 系列学习】Spring Data JPA 基础查询的更多相关文章
- Spring Data Jpa (二)JPA基础查询
介绍Spring Data Common里面的公用基本方法 (1)Spring Data Common的Repository Repository位于Spring Data Common的lib里面, ...
- 【Spring Data 系列学习】Spring Data JPA @Query 注解查询
[Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...
- Spring Data JPA 简单查询--接口方法
一.接口方法整理速查 下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.( ...
- Spring Data JPA简单查询接口方法速查
下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.(1)先按照功能进行分类 ...
- 【Spring Data 系列学习】了解 Spring Data JPA 、 Jpa 和 Hibernate
在开始学习 Spring Data JPA 之前,首先讨论下 Spring Data Jpa.JPA 和 Hibernate 之前的关系. JPA JPA 是 Java Persistence API ...
- spring data jpa 分页查询
https://www.cnblogs.com/hdwang/p/7843405.html spring data jpa 分页查询 法一(本地sql查询,注意表名啥的都用数据库中的名称,适用于特 ...
- springboot整合spring data jpa 动态查询
Spring Data JPA虽然大大的简化了持久层的开发,但是在实际开发中,很多地方都需要高级动态查询,在实现动态查询时我们需要用到Criteria API,主要是以下三个: 1.Criteria ...
- springboot集成Spring Data JPA数据查询
1.JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.它的出现主要是为 ...
- spring data JPA entityManager查询 并将查询到的值转为实体对象
spring data JPA entityManager查询 并将查询到的值转为实体对象 . https://blog.csdn.net/qq_34791233/article/details/81 ...
随机推荐
- iOS 自定义只有年月的DatePikerView
头文件: @interface YearMonthPikerView : UIView @property (nonatomic,copy) void(^cancelBlock)(); @proper ...
- 领导力 / LeaderShip
领导力 / LeaderShip 什么是领导力? 结合我自己的经验,谈谈理解. 我们人类社会,发展到现在,已经成为了一个集合体,这一点在工业革命之前,表现的极为明显. 常见的社会发展形态,会按照人与人 ...
- [LC] 207. Course Schedule
There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...
- LeetCode No.100,101,102
No.100 IsSameTree 相同的树 题目 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 输入: 1 1 / \ ...
- Jenkins+ant+jmeter搭建接口自动化测试环境
一.jmeter 1.下载jdk并安装配置 2.下载jmeter,并解包 下载地址:http://jmeter.apache.org/download_jmeter.cgi 二.ant 1.下载解包并 ...
- Introduction to Computer Science and Programming in Python--MIT
学习总结--(Introduction to Computer Science and Programming in Python--MIT) 导论 主题 重新利用数据结构来表达知识 理解算法的复杂性 ...
- android cpu affinity
暂时无法获取当前线程运行在哪个CPU上,待调查... int omask = 0; int nmask = 0xF0; static void affinity() { int err; int sy ...
- 疯狂收集个人信息的谷歌,为何不像Facebook那样让人毛骨悚然?
自从Facebook信息泄露丑闻事件发生后,互联网上的个人隐私及安全成为大众的"心病".而大众最讨厌的,是互联网企业收集自己的信息,因此都在积极讨伐这种行为.但他们却忘了,收集用户 ...
- linux下添加行数和修改tab空格数
在/etc/vimrc文件中添加: set nu set ts=4 保存即可
- GitHub之初始化
1.github上新建repository. 2.本地 mkdir git-init-demo. 3.cd git-init-demo. 4.git clone https://github.com/ ...