Spring Boot整合Spring Data

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... 阅读详情

之前打算把Spring Data的整合放在前面给大家分享和交流,但实际操作的时候觉得这块的知识虽然和之前的jpa有相似之处但用下来发现还是不一样就找了Spring Data的视频和资料学了一遍,就像之前说的学习Spring Boot需要懂得Spring体系的框架。


一  推荐使用的学习资料

尚硅谷系列教程:http://www.atguigu.com/download.shtml#springdata

教程讲的还是比较详细,基础不要太差都能快速上手


二  依赖的引入

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>


三 主配置文件配置

#DataBase DataSources
spring.datasource.url = jdbc:mysql://localhost:3306/springboot
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

四  接口和实体类

package com.debug.pojo;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="member")
public class Member {

	private int id;
	private String name;
	private String address;
	private int age;
	private String phone;
	private String email;
	private Date birthday;
	
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

Repository的写法需要按照Spring data的标准规范来写,可以使用SpringData的方法定义规范、注解@QUery(配合@Modifying)、以及Springdata提供的JpaRepository、CrudRepository等


package com.debug.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.Param;

import com.debug.pojo.Member;

public interface MemberRepository extends CrudRepository<Member,Integer>,JpaSpecificationExecutor<Member>{
   
    //单条件精确查询
    public Member findById(int id);
   
   //多条件精确查询
   public List<Member> getByAgeAndAddress(int age ,String address);
   
   //模糊查询1
   public List<Member> readByNameLike(String name);
   
   //模糊查询2
   public List<Member> readByNameStartingWith(String name);
   
   //in查询
   //public List<Member> readByIdIn(List<Integer> ids);
   public List<Member> readByIdIn(int[] ids);
   
    //带排序条件的in查询
   public List<Member> readByIdInOrderByIdDesc(int[] ids);
   
   @Query("select m from Member m where m.name like %:name%")
   public List<Member> getMemberInfoByName(@Param("name")String name);
   
   @Query(value="select m.* from member m where m.name=:name and age>=30",nativeQuery=true)
   public List<Member> getMemberInfoByNameAndAge(@Param("name")String name);
   
   @Modifying
   @Query("update Member m set m.name=:name where m.id=:id")
   public void updateMemberById(@Param("name")String name,@Param("id")int id) ;
   
   @Modifying
   @Query("delete from Member m  where m.id=:id")
   public void deleteMemberById(@Param("id")int id) ;
	   
   
   
   
}


五  service和controller


package com.debug.service;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.debug.dao.MemberRepository;
import com.debug.pojo.Member;

@Service
public class MemberService {
	
	@Resource
	private MemberRepository memberRepository;
	
	@Transactional(propagation=Propagation.REQUIRED)
	public void updateMemberById(String name,int id) {
		memberRepository.updateMemberById(name, id);
	}
	
	@Transactional(propagation=Propagation.REQUIRED)
	public void deleteMemberById(int id) {
		memberRepository.deleteMemberById( id);
	}
	
	public Member findById(int id) {
		return memberRepository.findById(id);
	}
	
	public List<Member> readByIdInOrderByIdDesc(int[] ids){
		return memberRepository.readByIdInOrderByIdDesc(ids);
	}
	
	public Page<Member> pagingAndSortingMember(int id){
		
		
		Order o1=new Order(Direction.DESC,"id");
		Sort sort=new Sort(o1);
	    
		PageRequest pg=new PageRequest(0,5,sort);
		
		Specification<Member> sp=new Specification<Member>() {

			
			public Predicate toPredicate(Root<Member> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
				Path path=root.get("id");
				Predicate p=builder.gt(path, id);
				return p;
			}
			
		};
	
		Page<Member> result=memberRepository.findAll(sp, pg);
		
		/*System.out.println("总页数"+result.getTotalPages());
		System.out.println("总记录数"+result.getTotalElements());
		System.out.println("当前页"+(result.getNumber()+1));
		
		System.out.println("数据"+result.getContent());*/
		
		
		return result;
		
	}
}

service只是挑了几个用到的方法,其他方法大家自己研究一下,都是体力活没什么难度

package com.debug.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.debug.pojo.Member;
import com.debug.service.MemberService;

@RestController
@RequestMapping("/member")
public class MemberController {
	
	@Resource
	private MemberService memberService;
  
	@RequestMapping("/findById")
	public Member findById() {
		Member m=memberService.findById(1);
		return m;
	}
	@RequestMapping("/readByIdInOrderByIdDesc")
	public List<Member> readByIdInOrderByIdDesc(){
		int[] ids= {1,4,5};
		return memberService.readByIdInOrderByIdDesc(ids);
	}
	@RequestMapping("/updateMemberById")
	public String updateMemberById() {
		memberService.updateMemberById("何润东", 1);
		return "数据修改成功";
	}
	@RequestMapping("/pagingAndSortingMember")
	public Page<Member> pagingAndSortingMember(){
		return memberService.pagingAndSortingMember(1);
	}
}

至此Spring Data的开发学习交流就告一段落了,根据这段时间的学习总结得出这个技术还是比较适合有一定工作经验的开发人员学习,要想学好Spring Boot需要扎实的Spring功底,如果开发经验不足可以放到后面一点进行学习。 害羞


uniapp原生安卓插件开发之路 声明: 我的功能需求:全局悬浮框,也就是在其他应用上依旧能悬浮。查遍uni文档,无法实现,甚至native.js也无法实现,无奈只能走上原生插件开发这条不归路了。(吐槽:天天写前端js,突然写了下android简直要炸,public static String啥的,var不香嘛,不过别人严谨肯定还是有别人道理的,加油吧,争取能入个门!) 本人不懂安卓开发,完全安卓小白,所以安卓方面可能表达的不是很好,安卓代码可能写的不优美,但我功能最终还是实现了。但是为了需求,能力总能被“逼”出来。有描述错误的还望指正 阅读详情

相关推荐

快乐8 Ai大模型XGBoost LightGBM预测系统

随机森林回归:通过集成多个决策树模型,提高预测的准确性和稳定性。XGBoost:一种基于梯度提升的强大模型,擅长处理结构化数据。LightGBM:一种高效的基于决策树算法的分布式梯度提升框架,具有快速的训练速度和低内存消耗。高预测准确率:通过集成多种模型,提供更为精准的预测结果。多种预测方法:支持同尾号、重号、温号、连号和综合预测等多种预测策略,满足不同用户的需求。实时日志:在预测过程中,用户可以实时查看系统的预测进度和结果。

m0_72636583的博客 1万+

org.springframework.data.domain.Sort

为什么80%的码农都做不了架构师?>>> ...

weixin_33767813的博客 6309

Palantir的本体论建模跟数仓建模的异同

Palantir的Foundry Ontology通过构建组织的数字孪生体,将数据集和模型映射为对象类型、属性、链接和操作类型,形成完整的语义知识网络。与传统数仓建模相比,本体建模以业务问题为驱动,强调细粒度语义和实时决策能力,采用图语义技术实现灵活的映射关系。

轩哥的个人研究和成长记录 1596

【MongoDB】org.springframework.data.domain.Sort的使用

在使用 MongoDB 与 Spring Data MongoDB 时,类被用来定义查询结果的排序方式。Spring Data MongoDB 支持通过Sort类来指定排序的字段和排序的方向(升序或降序)。以下是如何在 MongoDB 查询中使用Sort。

一瓶旺仔通个宵 704

Python量化交易实战:如何用pytdx库快速解析通达信.day文件(附完整代码)

本文详细介绍了如何使用Python的pytdx库高效解析通达信.day本地数据文件,构建免费、稳定的量化交易数据源。文章提供了从环境配置、基础数据读取、复权处理到板块信息获取的完整实战代码,并演示了如何将处理后的数据无缝接入Backtrader等回测框架,为量化策略开发提供可靠的数据基础。

ppp33的博客 1144

【实战学习(五)】开源项目学习之uWSGI的部署以及配合nginx

文章目录1)uWSGI是什么?1.1 WSGI1.1.1 Application端1.1.2 Server端1.1.3 WSGI中间件1.2 uwgi1.3 uWSGI、WSGI、uwsgi之间的关系*为什么有了uWSGI为什么还需要nginx?2)连接uwsgi和Django*避坑之Windows10安装uWSGI非常极其艰难,最好勿浪费时间,直接转战Linux吧:2.1 uWGI部署2.1.1 在虚拟环境下安装uwsgi:2.1.2 测试uWSGI的运行2.1.3 使用uWSGI运行Django项目2.

黑黑白白君的博客 1508

详解Spring Data

1. Spring Data概览 Spring Data的任务是为数据访问提供一个熟悉且一致的,基于Spring的编程模型,同时仍保留基础数据存储的特殊特征,这就是官网给我们的一个说明;从这里我们就可以很清楚的明白,Spring Data就是为了简化数据库的访问,例如关系型数据库MySQL,Oracle等,还有非关系型数据库Redis,MongoDB以及Elasticsearch等等,我们从它官网的主页上也不难看出,它支持很多很多的数据库; 网址:https://spring.io/projects/sp

夕刃的博客 9428

Python爬取网页数据并写入Excel

ChromeDriver下载链接:https://registry.npmmirror.com/binary.html?path=chromedriver/本例是从Excel表从读取数据,运用到网页中进行搜索,再将结果写入Excel表中。这里要先下载与Chrome版本相同的chromedriver(版本要相同!下载好后,将chromedriver路径正确配置在环境变量中。刚才爬了一些数据,分享一下代码。

weixin_68443051的博客 2519

手把手开发Vue+SpringBoot通讯录管理系统(含源码、文档)

《手把手开发Vue+SpringBoot通讯录管理系统》讲解如何使用Vue和SpringBoot开发这个项目,手把手演示开发流程!附赠源码、文档、数据库脚本等全部资料,提供售后答疑。课程对应项目的界面如下所示。

你的小程序地图功能还只是“摆设”吗?支付宝地图API的深度玩法都在这里了!

🏆本文收录于《滚雪球学支付宝小程序开发》专栏,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1821

在 ABAP Cloud 中玩转 CL_ABAP_PARALLEL 并行处理:从原理到实战

ABAP并行处理框架CL_ABAP_PARALLEL解析 本文系统介绍了SAP ABAP环境中实现并行处理的CL_ABAP_PARALLEL框架。该框架通过封装异步RFC和对话进程,为开发者提供了面向对象的API,显著提升大批量数据处理的效率。 文章首先分析了ABAP环境需要并行处理的原因:传统的串行处理在面对百万级数据时效率低下。然后详细介绍了CL_ABAP_PARALLEL的设计思路,它是一个"小型线程池"式的同步并行框架,适用于批量计算场景。此外,文章重点讲解了控制并行任务的关键参

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 341

Spring Data快速入门

Spring Data快速入门

weixin_45565886的博客 2142

【社招算法经验贴】算法社招记录

总的来说,也是收获了七七八八的offer,给的涨幅40~100%,职级有的可以对标到 p7(但阿里p7是真难a,a不动)。面了一圈下来,感觉大模型也在收缩hc。尤其是多模态相关hc。凭着上学期间做过相关视觉的work和paper,社招虽然能进面试,但是hc少得可怜,多模态已死慎入。还有大模型应用算法给的涨幅,跟搜广推的涨幅差别不大。真正能几百万往上的是基座pretrain/后训练/infra,但是全靠social和conn,hc极少。

Danger的博客 979

Spring Boot整合Spring Data JPA

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

daqi1983的博客 1590

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring Boot 整合 Spring Data JPA(JpaRepository)

Spring Boot 整合 Spring Data JPA 一、概念: spring data:spring data 是 spring提供的一个操作数据库的框架。而 spring data jpa 只是 spring data 框架下的一个基于 JPA 标准(规范)的操作数据库的模块。 spring data jpa:基于JPA 的标准 对数据进行操作。简化操作持久层的代码。只需要编写接口就...

dh_sheep的博客 998

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring Boot 整合 Spring Data JPA、Spring Boot 整合 Spring Security

Spring Boot 整合 Spring Data JPA Spring Data JPA 是 Spring Data ⼤家族的⼀员 JPA 和 Spring Data JPA 的关系 JPA (Java Persistence API)Java 持久层规范,定义了⼀系列 ORM 接口,它本身是不能直接使用,接口必须实现才能使用,Hibernate 框架就是⼀个实现了 JPA 规范的框架。 Spring Data JPA 是 Spring 框架提供的对 JPA 规范的抽象,通过约定的命名规范完成持久层接口

weixin_44152682的博客 486

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

hutao8896的博客 1113

Spring Boot 整合 Spring Data JPA

Spring Boot 是一个旨在简化 Spring 应用程序开发过程的框架,通过自动配置和“约定优于配置”的原则,帮助开发者快速构建独立且适用于生产环境的基于 Spring 的应用程序。Spring Data JPA 是 Spring Data 项目的一部分,它简化了基于 JPA(Java Persistence API)的数据访问层实现。通过简单的接口定义和方法签名,开发者可以轻松实现数据库操作,而无需编写大量的 SQL 语句和复杂的数据库访问逻辑。

m0_75079218的博客 507

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 Boot项目中整合Spring Data JPA,并能够在自己的项目中实现这一整合。使用swagger-ui文档页面的前提是你先要做出这个页面才能访问,我的项目是做了的,所以我用的是swagger-ui页面访问。简要介绍Spring Boot和Spring Data JPA,说明整合这两者的好处,例如简化数据库操作、提高开发效率等。特别说明:整合Spring Data JPA,我是在我之前做好的项目上添加的。

Wxlxunxuan的博客 1386

Springboot整合spring-boot-starter-data-elasticsearch

spring-data-elasticsearch的查询,相当于原生的es依赖而言,多了一些注解封装、repository类等,但是对于复杂查询还是没有办法很简便,因此便有了第三方的依赖Easy-es的诞生,类似于Mybatis-plus的方式,对于新手对es的使用比较友好,后面会进行讲解最后:我是Walker,一个热爱分享的程序员,希望我的输出能够帮助到你。

Think_and_work的博客 1908

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

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

元气满满的霄霄滴博客 2745

Spring Boot整合Spring Data JPA实践指南

随着互联网技术的快速发展,网络安全问题日益突出。Spring Boot作为一个轻量级的、基于Spring框架的项目,提供了快速开发的能力,同时也需要考虑安全性问题。Spring Boot安全管理系统的实现是一个涉及认证、授权、角色和权限管理的复杂过程。通过使用Spring Security框架,我们可以构建一个强大且灵活的安全系统。然而,安全是一个不断发展的领域,需要我们持续关注最新的安全威胁和防御措施。这篇文章提供了一个关于Spring Boot安全管理系统的高级概述,包括核心概念、实现策略和最佳实践。

SULIUW的博客 689

Spring Boot整合Spring data增删改查

1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.a...

weixin_44914784的博客 405

7 Spring Boot 整合 Spring Data JPA

Spring Boot 学习笔记。

qq_52077925的博客 790

Spring Boot整合Spring Data Jpa + QueryDSL

Spring Data JPA是一个Spring项目中常用的持久化框架,它简化了与数据库进行交互的过程。而QueryDSL是一个查询构建框架,可以让我们以面向对象的方式来编写数据库查询。在本文中,我们将讨论如何使用Spring Boot整合Spring Data JPA和QueryDSL,并提供一个使用案例来演示它们的用法。

weixin_52721608的博客 1295
上一篇: Spring Boot整合jdbctemplate
下一篇: linux部署SpringBoot程序
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值