热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springdatajpa介绍以及基础示例

JPA介绍JPA的全称是JavaPersistenceAPI,提供了一个规范,用于将数据通过Java对象持久化、读取和管理数据库中的关系表。所以JPA本质上就是一种ORM规

JPA介绍

JPA的全称是Java Persistence API,提供了一个规范,用于将数据通过Java对象持久化、读取和管理数据库中的关系表。所以JPA本质上就是一种ORM规范,它的目标是实现ORM的天下归一。

1、java数据库编程的进化史:

1)jdbc:

jdbc是jdk提供数据库操作最基础的api,它提供了一套操作数据库的标准规范,不同的数据库厂商通过自己的驱动jar来适配该规范。

Class.forName("com.mysql.cj.jdbc.Driver");
cOnn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");

// 执行查询
Statement stmt = conn.createStatement();
String sql = "SELECT id, name, url FROM websites";
ResultSet rs = stmt.executeQuery(sql);

2)hibernate、mybatis 等ORM框架:

  • Hibernate 可以认为是JPA规范的的一种实现,使用起来比较方便,但是不够灵活;
  • Mybatis是一个持久层的sql mapping框架。 mybatis的优势在于可以灵活的写SQL,自由度比较高

3)spring data jpa:

spring data jpa不是像Hibernate那样对jpa的实现,而是对其更进一步做了封装,使用起来非常简单、灵活。

spring data jpa的目的就是不让程序员花太多时间在数据库层面的处理,所以要做的只是声明接口(类似于mybatis),而且spring data jpa会帮常用sql都帮你拼写好(不像mybatis那样,还需要自己写sql或者mapper)。基于spring data jpa编写持久层逻辑,一般分为如下几步:

  • 定义实体类,关联数据库中的表。
  • 声明持久层接口,接口需要继承Repository。
  • 接口中声明需要的方法,spring data jpa会自动给我们生成实现代码

Spring data jpa有以下几个常用的接口:

  • Repository:仅仅是一个标识,表明任何继承它的均为仓库接口类,方便Spring自动扫描识别, 一般不在程序中直接使用。
  • CrudRepository:继承Repository,实现了一组CRUD相关的方法,这个用的比较多,一般如果上层业务只需要基本的增删改查,继承这个接口就可以了。
  • JpaRepository:继承PagingAndSortingRepository,实现一组JPA规范相关的方法。这个也用的比较多,它和CrudRepository区别在于支持分页和排序。

简单示例

创建springboot项目:
1)pom.xm如下:


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.qiyi.test
TestSpringBoot
0.0.1-SNAPSHOT
TestSpringBoot

org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE



UTF-8
1.8
1.8



junit
junit
test


org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-test
test



mysql
mysql-connector-java
runtime



org.springframework.boot
spring-boot-starter-data-jpa



com.alibaba
fastjson
1.2.9






2)application.properties:

spring.jpa.show-sql = true
logging.level.org.springframework.data=DEBUG
spring.jpa.hibernate.ddl-auto=
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3)定义实体类:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="test")
public class Test{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "service_code")
private String serviceCode;
private int status = 0;//0:正常、-1异常


//set get方法
}

4)dao接口:

import org.springframework.data.jpa.repository.JpaRepository;
import com.qiyi.test.TestSpringBoot.entity.WoodyService;
public interface TestDao extends JpaRepository {
}

5)controller层:

public class TestController {

@Autowired
private TestDao testDao;

@RequestMapping("/jpsTest")
@ResponseBody
public JSONObject jpsTest(HttpServletRequest request,HttpServletResponse httpResponse) {

JSONObject res = new JSONObject();

try {
List findAll = testDao.findAll();

Optional findById = testDao.findById(33);
System.out.println(findById);
System.out.println("==============");

long count = testDao.count();
System.out.println(count);
res.put("data",findAll);
res.put("code","success");
} catch (Exception e) {
res.put("code","error");
return res;
}
return res;
}
}

注:省略了service层.

可以看到,dao层接口继承了JpaRepository后,默认会有如下findXXX方法,以及count等方法。

查询规范

直接在接口中定义查询方法,如果是符合规范的,可以不用写实现,目前支持的关键字写法如下:

支持的关键字1

支持的关键字2

参考:http://www.machengyu.net/tech/2019/06/29/spring-data-jpa-demo.html

https://blog.csdn.net/hgx_suiyuesusu/article/details/80919171


推荐阅读
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 本文详细介绍了Elasticsearch中的分页查询机制,包括基本的分页查询流程、'from-size'浅分页与'scroll'深分页的区别及应用场景,以及两者在性能上的对比。 ... [详细]
  • 本文将在前几篇关于Android测试理论知识的基础上,通过ApiDemoTest实例详细探讨如何使用ApplicationTestCase进行Android应用测试。建议读者先阅读Android测试教程系列中的相关内容,以便更好地理解本文的实践部分。 ... [详细]
  • 2017年软件开发领域的七大变革
    随着技术的不断进步,2017年对软件开发人员而言将充满挑战与机遇。本文探讨了开发人员需要适应的七个关键变化,包括人工智能、聊天机器人、容器技术、应用程序版本控制、云测试环境、大众开发者崛起以及系统管理的云迁移。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 本文详细介绍了Java中HashSet的工作原理及其源码分析。HashSet实现了Set接口,内部通过HashMap来存储数据,不保证元素的迭代顺序,且允许null值的存在。文章不仅涵盖了HashSet的基本概念,还深入探讨了其内部实现细节。 ... [详细]
  • 在Ubuntu 16.10 (x86) 上安装 WordPress 4.7.115
    本文介绍如何在Ubuntu 16.10 (x86) 系统上安装WordPress 4.7.115,包括下载、解压、配置等步骤,确保安装过程顺利进行。 ... [详细]
  • 本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ... [详细]
  • 本文介绍如何使用 PHP 构建一个简单的 API 接口,该接口接收客户端的数据请求,并以 JSON 格式返回响应。 ... [详细]
author-avatar
园园哚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有