Spring Boot学习笔记(二)——Spring-data-jpa

Spring Boot整合Spring Data JPA详解 Spring Boot整合Spring Data JPA理解 官方文档: Spring Data JPA 官方文档 一、 Sping Data JPA 简介 在此之前我们首先来认识一下,**Spring Data JPA** 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,Spring Data JP... 阅读详情
JPA简介

JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink等ORM框架各自为营的局面。JPA是在充分吸收了现有Hibernate、TopLink等ORM框架的基础上发展起来的,具有易于使用,伸缩性强等优点。

JPA是一套规范,不是一套产品。Hibernate是一套产品,如果这些产品实现了JPA规范,那么我们可以叫它们为JPA的实现产品。使用JPA,就可以把我们的应用完全从Hibernate中解脱出来 

Spring-data-jpa就是基于Hibernate的实现,配合Spring Boot可以更加快速高效的开发我们的项目,其使用简单快捷,甚至可以不用写一条SQL语句,基本可以满足大部分需求,深受广大开发者的青睐。

Spring-data-jpa主要类介绍

在Spring-data-jpa的提供了这么几个类供我们的crud操作:

CrudRepository:基本的增删改查操作接口

QueryByExampleExecutor:根据实例条件查询接口

PagingAndSortingRepository:分页和排序接口集成CrudRepository接口

JpaRepository:继承了上面所有接口

由此可见我们只需实现JpaRepository接口便可拥有上面所有功能

Spring-data-jpa基本使用

添加pom依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql依赖-->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

修改配置文件:application.yml 增加数据库连接配置,修改为自己的数据库

#设置端口
server:
  port: 8080
  context-path: /
#开发环境日志
logging:
  config: log4j2-dev.xml
spring:
#############################################主库配置#########################################
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/blog?useUnicode=true&characterEncoding=utf-8&characterSetResults=utf-8
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

创建实体类UserInfo

@Entity
@Table(name = "user_info")
public class UserInfo implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private Integer userId;

    @Column(name = "user_name")
    private String userName;
    省略get()/set()方法
}

@Entity:表明这是个实体类

@Table(name = "user_info"):映射数据库表

@Column(name = "user_id"):映射数据库字段

@GeneratedValue:表明为主键id

创建接口类UserInfoRepository继承JpaRepository

public interface UserInfoRepository extends JpaRepository<UserInfo,Integer> {
}

创建service实现类UserInfoServiceImpl(接口在这省略)

@Service
public class UserInfoServiceImpl implements UserInfoService {

    @Autowired
    private UserInfoRepository userInfoRepository;

    @Override
    public UserInfo findAll(Integer id){
        UserInfo user = userInfoRepository.findOne(id);
        return user;
    }
}

创建控制层UserInfoController

@Controller
public class UserInfoController {

    @Autowired
    private UserInfoService userInfoService;

    @RequestMapping(value = "/findOne")
    @ResponseBody
    public UserInfo findAll(@RequestParam("id") Integer id){
        UserInfo user = userInfoService.findOne(id);
        return user;
    }
}

到此我们就完成了一个简单的查询操作,接下来创建数据库,运行项目(会自动创建数据表),往数据库手动添加一条信息,然后打开浏览器访问 http://127.0.0.1:8080/findOne?id=1 即可看到结果。

jpa的分页排序操作:修改UserInfoServiceImpl实现类即可

@Service
public class UserInfoServiceImpl implements UserInfoService {

    @Autowired
    private UserInfoRepository userInfoRepository;

    @Override
    public Page<UserInfo> findOne(Integer id){
        //排序
        Sort sort = new Sort(Sort.Direction.DESC,"排序字段");
        //分页(从第一页开始,每页10条数据)
        Pageable pageable = new PageRequest(1,10,sort);
        Page<UserInfo> page = userInfoRepository.findAll(pageable);
        return page;
    }
}

JpaRepository接口提供的其他方法大家可以自己去尝试很简单,这里要说的是jpa是一种规范,那么他的查询方法同样有严格的命名定义,除了一些简单增删改查外,稍微复杂点的如 findByNameLike、findByNameStartingWith 等一系列方法都是遵循严格的命名定义不能随便写,下面给出jpa按规则查询的方法:

KeywordSampleJPQL snippet
IsNotNullfindByAgeNotNull...  where x.age not null
LikefindByNameLike...  where x.name like ?1
NotLikefindByNameNotLike...  where x.name not like ?1
StartingWithfindByNameStartingWith...  where x.name like ?1(parameter bound with appended %)
EndingWithfindByNameEndingWith...  where x.name like ?1(parameter bound with prepended %)
ContainingfindByNameContaining...  where x.name like ?1(parameter bound wrapped in %)
OrderByfindByAgeOrderByName...  where x.age = ?1 order by x.name desc
NotfindByNameNot...  where x.name <> ?1
InfindByAgeIn...  where x.age in ?1
NotInfindByAgeNotIn...  where x.age not in ?1
TruefindByActiveTrue...  where x.avtive = true
FlasefindByActiveFalse...  where x.active = false
And findByNameAndAge...  where x.name = ?1 and x.age = ?2
OrfindByNameOrAge...  where x.name = ?1 or x.age = ?2
BetweenfindBtAgeBetween...  where x.age between ?1 and ?2
LessThanfindByAgeLessThan...  where x.age  <  ?1
GreaterThanfindByAgeGreaterThan...  where x.age > ?1
After/Before......
IsNullfindByAgeIsNull...  where x.age is null
我们只需要在接口中按规则定义这些方法即可,不用写实现直接使用即可,那么问题来了,这些方法名字又长记不住怎么办,能不能自己定义呢,答案是肯定的,这里给出例子,在UserInfoRepository接口中定义方法,通过@Query注解可以自定义SQL语句,这样我们就可以使用我们自己的CRUD方法了,然后直接在service中调用即可。 注意:jpa的sql是面向对象的,因此from后的表名可以使用相应的实体类,占位符用?1代表参数里的第几个参数,相当于mybatis参数中的@param
public interface UserInfoRepository extends JpaRepository<UserInfo,Integer> {

    /**
     * 根据用户名查询用户信息
     * @param userName
     * @return
     */
    @Query("select u from UserInfo u where u.userName=?1")
    UserInfo findUserInfoByName(String userName);

    /**
     * 查询用户信息
     * @return
     */
    @Query("select u from UserInfo u ")
    UserInfo findUserInfo();
}
Spring-data-jpa的简单操作到此就结束了,怎么样是不是很简单呢,当然还有更加高级的玩法,我们可以通过继承JpaSpecificationExecutor来扩展我们的复杂查询操作,在下一篇中我会做详细介绍以及对jpa的封装,让我们的开发变得更加方便易懂
Spring同时集成JPA与Mybatis ORM ORM的出现,使得关系型数据库映射成了对象;简单来说,有了ORM之后,JAVA程序员从面向JDBC编程转化成面向JAVA对象编程。 Spring ORM Spring对ORM的解决方案主要体现在以下方面: 统一的资源管理方式与异常管理:Spring使用各种ORM框架,资源管理及使用方式都是统一的;同时Spring会将各个ORM框架的异常转译到Spring异常体系下。 统一的事务管理:Spring通过IoC和AOP技术,形成了事务管理抽象层,接管了各种ORM框架下的数据访问的事务管理。 阅读详情

相关推荐

Spring Boot示例 - 2. 使用Spring Boot + Spring Data REST + Spring Data JPA构建符合HATEOAS规范的REST应用

一、概述一般使用Spring MVC + Spring Data JPA即可构建REST服务,但是这种方式要完整实现Controller层,Service层和Repository层,需要编写很多样板代码,诸如注释,XML配置等。 使用Spring Data REST可以轻松构建超媒体驱动(hypermedia-driven)的REST服务。 Spring Data REST本身是个Spring

qiutongyeluo的专栏 8400

Spring Data JPA 从入门到精通~JpaSpecificationExecutor示例

新建两个实体 @Entity(name = "UserInfoEntity") @Table(name = "user_info", schema = "test") public class UserInfoEntity implements Serializable { @Id @Column(name = "id", nullable = false) private Integer id; @Column(name = "first_name", nullable =

小强快跑~~ 420

【Spring Boot】SpringBoot和数据库交互: 使用Spring Data JPA

在本博客中,我们详细探索了Spring Data JPA在Spring Boot中的应用。从传统数据库交互到现代化的JPA方式,再到实体的创建、数据访问和事务管理,每一步都进行了深入解析。通过实际案例,明确展示了从建模到数据访问的全流程。同时,也针对常见问题,如N+1查询,给出了解决建议。此文旨在帮助开发者更有效地利用Spring Data JPA,简化数据库操作,提高开发效率。

Ricky的博客 4920

【Spring Data JPA】JPA常用注解

@Entity【指定该实体类被JPA管理】 @Table【指定该实体类对应哪张表】 @Id【单个主键】 @IdClass【联合主键】 @Column【表示实体类属性对应数据库表的哪一字段(列)】

杜小舟的博客 2688

Spring Boot 菜鸟教程 2 Data JPA

Spring Data JPA 用来简化创建 JPA 数据访问层和跨存储的持久层功能。 官网文档连接 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ Spring Data JPA提供的接口 Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组

菜鸟教程 9701

springboot2.0+jpa+mysql

springboot2.0 +jpa+mysql 整合,代码是根据官网实现的。

jpa 自定义sql if_Spring Boot集成Jpa这篇就够

目前市场上Java语言ORM框架有Mybatis、Hibernate、Spring Data JPA,其中JPA底层还是使用Hibernate实现,引用JPQL查询语言,属于Spring整个生态体系的一部分,使用起来比较方便,加快了研发效率。Part-1: Jpa基础知识本章节将通过一些例子让大家对Jpa的日常使用有一个了解。数据库准备CREATE TABLE `user_info` (...

weixin_39827034的博客 392

多核异构处理器核间通信:从共享内存到RPMsg协议的实战解析

在多核异构处理器架构中,核间通信是实现高效协同计算的核心技术。其基本原理是通过共享内存作为数据交换的物理媒介,配合硬件信号机制实现同步与通知。从技术价值看,它解决了不同架构核心间的数据共享与指令协同问题,是释放异构计算潜力的关键。在应用场景上,该技术广泛应用于智能物联网设备、汽车电子和工业控制等领域,用于连接高性能应用处理器与实时微控制器。本文以典型的ARM Cortex-A与Cortex-M组合为例,深入剖析了基于共享内存和RPMsg协议的通信机制,涵盖了从硬件基础到软件协议栈的完整实现链路,并提供了针对

weixin_26969269的博客 447

Spring Boot学习笔记(二)Spring Data Jpa 快速上手(一)使用spring data jpa 实现增删改查,Spring boot进行单元测试

环境准备 在你的application.properties进行如下设置 其中datasource.sul,username和password写自己的数据库配置 spring.datasource.url=jdbc:mysql://localhost:3306/db_example?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spri

TUTsmile的博客 435

ArcGIS基础实战:面数据拓扑创建和错误修改全流程

通过下图的操作我们可以发现,图层的【Shape_Length】和【Shape_Area】字段的数值都发生了改变,表明两个图层重叠的那一部分图斑合并到另一个图班上,其面积会减小、长度会变大(自己重新计算一下也可以得到此验证结果的)。如图【拓扑实验结果】文件夹里右键,新建【文件地理数据库】,并进行命名为【xx拓扑检查】备注:养成良好的命名习惯。然后在【xx拓扑检查】下右键打开【新建要素数据集】,并对数据集进行命名为【XX拓扑】,然后进行下一步设置。在【KK拓扑】数据集上右键,新建【拓扑】。

yuanYW7556的博客 1万+

万象RK3506-EG1800网关使用说明

摘要:HD-RK3506-EG1800是一款高性能工业物联网边缘计算网关,支持Buildroot和Ubuntu双系统。文档详细介绍了网关的网络配置(包括ETH0/ETH1的静态IP设置、WiFi连接)、时钟同步、HSL软件安装配置(含开机自启动服务)、系统日志优化以及刷机操作指南(Loader/Maskrom模式)。特别提供了基于lighttpd的网页管理方案,通过HTML界面实现网络参数可视化配置,包含身份验证、实时状态显示和表单提交功能。网关默认ETH0固定IP为192.168.1.10,提供完整的CL

tian_jiangnan的博客 174

spring-boot学习笔记(二)spring-data-jpa的简介以及项目集成

一、spring-data-jpa简介及其用法spring-data-jpa 常用接口1.CrudRepository接口继承了repository接口,包含了基本的增删改查方法2.PagingAndSortingRepository接口继承了CrudRepository接口,增加了分页以及排序的方法二、spring-boot项目集成jpa1.在build.gradle文件中添加spring-da...

小米吃辣椒的博客 1437

S型速度曲线C程序实现

S型速度曲线C语言程序实现 前言 S型曲线相较于梯形速度曲线具有运行更加平稳的特点,S型曲线共有八种运行情况,感兴趣可以查阅相关文献 代码段 #include <stdio.h> #include <math.h> #define FP64 double int main(void) { /**************************** 定义相关变量(需要映射到PLC寄存器才能进行监控) ***********************/ FP6

LSX312441548的博客 8392

Spring Boot学习笔记(三)Spring Data Jpa 快速上手(二) jpa命名规则 与 Jpql、Sql

1.1 Jpa命名规则 采用小驼峰命名法 关键字 方法命名 sql where字句 And findByNameAndPwd where name= ? and pwd =? Or findByNameOrSex where name= ? or sex=? Is,Equals findById,findByIdEquals where id= ? Between findByIdBetween where id between ? and ? LessThan findBy

TUTsmile的博客 773

3.详解Labview串口通讯--从串口线连接到串口通讯保姆级教程

本文非常详细的介绍了使用Labview实现串口通讯,读完题主这篇文章,即使你是今天刚下载的Labview,也能熟练的连接并驱动串口执行,接下来和我一起学习下,记得关注并点赞不迷路

关注我,更多技术问题欢迎私聊~ 1万+

基于Simulink的异步电机参数在线辨识与自适应控制仿真

本文基于Simulink平台,详细介绍了异步电机参数在线辨识与自适应控制系统的仿真实现。针对异步电机运行中参数时变问题,采用模型参考自适应系统(MRAS)实时辨识转子电阻和互感,并结合自适应PI控制策略动态调整控制器参数。通过搭建完整的矢量控制(FOC)仿真模型,验证了系统在稳态辨识、参数摄动和动态响应等工况下的性能:参数辨识误差<1.2%,转速跟踪误差<20rpm,动态响应时间<10ms。文章还提供了详细的Simulink建模步骤、核心代码实现及性能分析,为高级电机控制系统的设计与优化提

amy_mhd的博客 72

Java Web开发进阶——Spring Boot与Spring Data JPA

Spring Data JPA 是 Spring Data 项目中的子项目,旨在简化与 JPA(Java Persistence API)的集成。它在标准 JPA 的基础上提供了更高层次的抽象,开发者可以使用极少的代码实现复杂的数据操作。Spring Data JPA 是 Spring 提供的一种面向数据访问的持久化框架,它简化了 JPA 的实现,为开发者提供了一种快速操作数据库的方式。Spring Data JPA 的强大之处在于其灵活的查询方式,支持方法派生、JPQL 和原生 SQL。

好看资源网的博客 2244

Autosar Dcm配置-App到Boot的跳转及1002回复配置及实现-基于ETAS软件

在软件刷写流程中,上位机(诊断仪)发送1002后,APP检查允许跳转boot后,在特定的ram(软复位不清除)写入指定置后通过触发软件复位来跳转到boot的。在APP跳转到Bootloader时,1002的回复有两种方式,一种是APP直接回复,然后跳转,另一种是APP回复NRC78,然后跳转,在Boot中回复。本文介绍这两种方式的实现。如果是在APP中回复,可以少发一个0x78,整体跳转时间可能会少一些。但是如果诊断在收到5002之后立马请求其他的服务,可能出现boot正在初始化而未正常接收到报文。

赞的博客 1556

Spring Boot下的Spring Data JPA实战详解

1.点睛Spring Data JPA(1).什么名字是Spring Data JPA Spring Data JPA是Spring基于Hibernate开发的一个JPA框架,Spring Data JPA是Spring Data的一个子项目,它通过提供基于JPA的Repository极大地减少了JPA作为数据访问方案的代码量,也就是xml不需要再写很多常规的sql代码了。(2).定义数据访问层

c136547731的博客 2809

DeerFlow 系列教程 第三篇 | 核心技术深度剖析:Skills、Memory 与 Context Engineering

摘要化是 Context Engineering 中最关键的组件——它直接决定了长对话的可用性。Skills 技能系统通过渐进式加载的三层模型,在保持系统提示词轻量的同时,支持无限数量的技能扩展。从发现到执行的 10 个生命周期阶段,配合 AI 驱动的安全扫描和多层缓存,构成了一个生产级的技能管理框架。Memory 长期记忆系统通过文件系统持久化、LLM 驱动的信息提取和防抖动异步更新,实现了跨会话的认知持久化。六类事实分类体系和修正信号检测机制,让 Agent 能够从交互中持续学习和改进。

weixin_43674738的博客 280

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring Boot整合Spring Data JPA

Spring Data中按照框架的规范自定义了Repository接口,除了可以使用接口提供的默认方法外,还可以按特定规则来定义查询方法,只要这些查询方法的方法名遵守特定的规则,不需要提供方法实现体,Spring Data就会自动为这些方法生成查询语句。Spring Data对这种特定的查询方法的定义规范如下:以find、read、get、query、count开头。涉及查询条件时,条件的属性使用条件关键字连接,并且条件属性的首字母大写。

daqi1983的博客 1590

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring Data JPA详解

Spring Data是持久层通用解决方案,支持关系型数据库 Oracle、MySQL、非关系型数据库NoSQL、Map-Reduce 框架、云基础数据服务 、搜索服务等。

JAVA_KX的博客 3289

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

hutao8896的博客 1113

Spring Data JPA

快速入门spring data jpa,并且集成到Springboot

llg3189609554的博客 1431

06 Spring Boot整合 Spring Data JPA

JPA (Java Persistence API) : 是Sun 官方提出的Java 持久化规范。Spring Data JPA 是Spring Data 的一个子项目,通过提供基于JPA 的Respository极大地减少了JPA 作为数据访问方案的代码量。 通过Spring Data JPA 框架, 开发者可以省略实现持久层业务逻辑的工作,唯一要做的就是声明持久层的接口,其他都交给Spri...

数据知道的博客 2万+

Spring Boot数据访问——整合Spring Data JPA篇!超详细!

Spring Data JPA 提供了很多模板代码,易于扩展,可以大幅提高开发效率,使开发者用极简的代码即可实现对数据的访问。基于SpringDataJPA的规范可以提升数据访问层的开发效率和灵活性,开发人员在使用 Spring Data JPA 时,应基于 Spring Data JPA 的规范同时也需要遵守团队的代码规范和风格,保证代码清晰易读,从而开发高质量的程序。

元气满满的霄霄滴博客 2744
上一篇: Elasticsearch 系列指南(五)——ELK日志收集
下一篇: Spring Boot学习笔记(三)——Spring-data-jpa扩展封装
我叫周伯通
博客等级 码龄10年 20粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值