【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 还有 PagingAndSortingRepositoryJpaRepository 等。

我们用工具 IntelliJ IDEA,打开类 Repository.class,默认快捷键 CTRL+H ,如图显示:

从上图我们可以看出继承关系,点击 JpaRepository 打开Navigate→File Structure,或者点击最左边的 Structure,可以查看此类的结构以及有哪些方法和继承类。

  • CrudRepository:基本的 CRUD 方法。
  • PagingAndSortingRepository:继承 CrudRepository,并增加分页功能。
  • JpaRepository :继承 PagingAndSortingRepositoryQueryByExampleExecutor

快速上手

创建一个 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 语句,在日常测试环境也能提高一定的开发效率。

示例代码-github

原文地址:https://www.cnblogs.com/mtcarpenter/p/12426284.html

时间: 2024-10-10 08:24:39

【Spring Data 系列学习】Spring Data JPA 基础查询的相关文章

spring boot系列(五)spring boot 配置spring data jpa (查询方法)

接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnblogs.com/kxm87/p/9273555.html中的一样. 2 创建数据库操作类相当于dao层,主要创建一个接口UserRepository,继承JpaRepository接口即可.本代码中主要都是自定义方法. 使用findXX 或者countXX(这两个不用编写sql,jpa会自动生成)

Spring MVC&Spring Data JPA过滤数据的另一种API

这就是我滚动的方式2014年3月23日在春天mvc | 规格 | 春季资料 | jpa | 参数解析器 | java | 搜索 | 搜索 | 滤波 Spring MVC&Spring Data JPA过滤数据的另一种API 更新 自从我写这篇文章以来已经有一段时间了.我仍然认为它值得阅读,但请务必检查Github页面,因为所描述的库已经发展,并已成为Maven Central中的一个完整的开源项目. 我坚信,一个卓越的框架最终会成为一种(领域特定的)语言. 我已经使用了Spring MVC好几年

Spring Boot整合Spring MVC、Spring、Spring Data JPA(Hibernate)

一句话总结:Spring Boot不是新的功能框架,而是为了简化如SSH.SSM等等多个框架的搭建.整合及配置.使用Spring Boot 10分钟搭建起Spring MVC.Spring.Spring Data JPA(Hibernate)基础后台架构.基本零配置,全注解. 步骤一: 使用Spring Boot提供的网站生成maven项目及基础依赖.打开https://start.spring.io/网站,右侧输入想要的特性依赖.输入Web提供整合Spring MVC,输入JPA提供整合Spr

Spring Boot 整合Spring Data JPA

Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> &l

Spring boot+Mysql+Spring data JPA一个Web的Demo

1.概述 因为要用spring boot,最近刚刚学习.这是一个web项目的配合mysq+Hibernate+tomcat的简单示例demo,很容易在此基础上扩展成自己的项目. 2.创建初始spring demo 作者用的IDE是IDEA,新建一个工程,选择Spring Initalizer.下一步的话由于作者需要部署到服务器上面,选择了war.不需要的话可以选择jar.选择spring web+spring Data JPA+Mysql Driver. 然后完成即可,首次运行的话配置依赖需要一

java框架整合例子(spring、spring mvc、spring data jpa、hibernate)

这是自己参考springside开源项目整合的框架,主要整合了spring.spring mvc.spring data jpa.hibernate这几个框架,对于这几个框架其中感觉比较舒服的还是spring data jpa这个框架,这个框架在写dao类的时候,只需要写一个接口声明,spring data jpa会自动的实现其实现类,使用起来比较方便,至于详细的使用方法还请自己百度吧,因为我也不清楚.个人感觉还有一个比较不错的地方就是能够打印sql语句,都知道hibernate打印的sql语句

java(样品集成框架spring、spring mvc、spring data jpa、hibernate)

这是你自己的参考springside集成框架的开源项目.主要的整合spring.spring mvc.spring data jpa.hibernate几个框架,对于这些框架中仍然感觉更舒适spring data jpa该框架,该框架编写dao上课时间,只需要编写一个接口声明,spring data jpa会自己主动的实现事实上现类,使用起来比較方便,至于具体的用法还请自己百度吧,由于我也不清楚. 个人感觉另一个比較不错的地方就是可以打印sql语句,都知道hibernate打印的sql语句并不会

spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)

最近上班太忙所以耽搁了给大家分享实战springboot 框架的使用. 下面是spring boot 整合多个框架的使用. 首先是准备工作要做好. 第一  导入框架所需的包,我们用的事maven 进行对包的管理. 以上的举例是本人的H5DS的真实的后台管理项目,这个项目正在盛情融资中,各位多多捧点人场.关注一下软件发展的动态,说不定以后就是您的生活不可或缺的软件哟. 点击打开链接.闲话少说.现在切入正题. 第二,写点配置文件 第三,spring data -设计一个简单的po关系,这里需要下载一

spring boot 中Spring data jpa数据库表字段命名策略

spring boot 中Spring data jpa命名策略 数据库,表字段命名是驼峰命名法(UserID),Spring data jpa 自动更新之后是 user_id, 表字段不对照, Spring data jpa基于Hibernate5.0 application.properties 写法 1.无修改命名 spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNa