springdatajpa命名规则_Spring Boot 之Spring data JPA简介

PA的全称是Java Persistence API (JPA),他是一个存储API的标准,而Spring data JPA就是对JPA的一种实现,可以让我们方便的对数据进行存取。按照约定好的方法命名规则写dao层接口,从而在不实现接口的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

Spring data JPA可以看做是对Hibernate的二次封装。本文将会以一个具体的例子来讲解,怎么在Spring Boot中使用Spring data JPA。

添加依赖

我们要添加如下的Spring data JPA依赖,为了方便测试,我们添加一个h2的内存数据库:

org.springframework.boot            spring-boot-starter-data-jpa        com.h2database            h2            runtime

添加entity bean

我们来创建一个entity bean:

@Entity@Datapublic class Book {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    private long id;    @Column(nullable = false, unique = true)    private String title;    @Column(nullable = false)    private String author;}

创建 Dao

public interface BookRepository extends JpaRepository {    List findByTitle(String title);    @Query("SELECT b FROM Book b WHERE LOWER(b.title) = LOWER(:title)")    Book retrieveByTitle(@Param("title") String title);}

所有的Dao都需要继承Repository接口,Repository是一个空的接口:

@Indexedpublic interface Repository {}

如果要使用默认的通用的一些实现,则可以继承CrudRepository, PagingAndSortingRepository和JpaRepository。

上面的例子中我们继承了JpaRepository。

上面的例子中我们创建了一个按Title查找的方法:

List findByTitle(String title);

这个方法我们是不需要自己去实现的,Spring Data JPA会帮我们去实现。我们可以使用find…By, read…By, query…By, count…By,和 get…By的格式定义查询语句,By后面接的就是Entity的属性。除了And,我们还可以使用Or来拼接方法,下面我们再举个例子:

interface PersonRepository extends Repository {  List findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);  // Enables the distinct flag for the query  List findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);  List findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);  // Enabling ignoring case for an individual property  List findByLastnameIgnoreCase(String lastname);  // Enabling ignoring case for all suitable properties  List findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);  // Enabling static ORDER BY for a query  List findByLastnameOrderByFirstnameAsc(String lastname);  List findByLastnameOrderByFirstnameDesc(String lastname);}

当然,处理方法拼接外,我们还可以自定义sql查询语句:

    @Query("SELECT b FROM Book b WHERE LOWER(b.title) = LOWER(:title)")    Book retrieveByTitle(@Param("title") String title);

自定义查询语句给Spring data JPA提供了更大的想象空间。

Spring Data Configuration

要使用Spring Data JPA, 我们还需要在配置文件中指定要扫描的目录,使用@EnableJpaRepositories注解来实现:

@Configuration@EnableJpaRepositories(basePackages = "com.flydean.repository")public class PersistenceConfig {}

我们还需要在配置文件中指定数据源的属性:

spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1spring.datasource.username=saspring.datasource.password=sa

测试

有了上面的一切,我们就可以测试我们的数据源了:

@Slf4j@RunWith(SpringRunner.class)@SpringBootTest(classes = {JpaApp.class})public class BookRepositoryTest {    @Autowired    private BookRepository bookRepository;    @Test    @Transactional(readOnly=false)    public void testBookRepository(){        Book book = new Book();        book.setTitle(randomAlphabetic(10));        book.setAuthor(randomAlphabetic(15));        bookRepository.save(book);       bookRepository.findByTitle(book.getTitle()).forEach(e -> log.info(e.toString()));       log.info(bookRepository.retrieveByTitle(book.getTitle()).toString());    }}

欢迎关注我的公众号:程序那些事,更多精彩等着您!

更多内容请访问:flydean的博客 flydean.com

a1242bd7a4317d8f88e47c030f8e9178.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHPCMS 模板的设置

编制好模板后&#xff0c; 一、设置config.php<?php return array (name > 现代的蓝红色模板,author > dazhaihui,dirname > simpleblue,homepage > http://www.phpcms.cn/,version > 1.0,disable > 0,file_explan >array (templates|simpleblue|cont…

奖学金设计mysql_基于JAVA的奖学金评定系统设计与实现(MySQL)(含录像)

基于JAVA的奖学金评定系统设计与实现(MySQL)(含录像)(任务书,开题报告,外文翻译,毕业论文10000字,程序代码,MySQL数据库,答辩PPT,答辩视频录像)摘 要本文论述了奖学金评定系统从分析到实现的整个过程&#xff0c;说明了系统实现的基本思路&#xff0c;介绍系统不同的功能模块以…

python中的列表和元组_python中列表和元组的区别

如果有了解过python中的列表和元组&#xff0c;你可能会知道相对于列表&#xff0c;元组是不可变的&#xff0c;也就是说元组中的数据不能随意更改。除了列表是用中括号表示而元组是用小括号表示之外&#xff0c;这两种数据类型好像并没有什么不同&#xff0c;都是用来存放一系…

sublime2使用和配置

官方下载地址:http://www.sublimetext.com/2,可下载zip免安装版 显示左侧目录树 无需安装插件,菜单>“文件”》“打开目录”&#xff0c;会自动显示 代码注释 无需安装插件&#xff1a;Ctrl/&#xff1a;注释整行&#xff0c;可来回切换&#xff0c;Submlie Text可自动判断…

mysql ab复制延时_Mysql的AB复制

Mysql的AB复制环境&#xff1a;rhel 6.5master:192.168.2.1slave1:192.168.2.2slave2&#xff1a;192.168.2.101.mysql的单向复制注: mysql数据库的版本,两个数据库版本要相同,或者slave比master版本高!yum install mysql-server -y请注意当你进行复制时,所有对复制中的表的更…

python ckeditor上传图片400错误_又一款python开发神器

优秀的python开发工具有很多&#xff0c;比如pycharm&#xff0c;spder&#xff0c;ipython&#xff0c;jupyter以及很多编辑器的插件等。但是如果利用python来做数据分析的话&#xff0c;要是有一款类似Rstudio的工具就好了&#xff0c;Rstudio是非常人性化的工具。之前有一个…

mysql.data.dll win10_【MySQL】Windows10下安装

2.配置环境变量变量名&#xff1a;MYSQL_HOME变量值&#xff1a;download_path\mysql-8.0.19-winx64path添加&#xff1a;%MYSQL_HOME%\bin;3.生成data文件管理员身份&#xff0c;进入download_path\mysql-8.0.19-winx64\bin命令&#xff1a;mysqld --initialize-insecure --us…

Chrome 调试动态加载的js

今天有个同事问到我用chrome调试动态加载js的问题&#xff0c;这个问题之前遇到过&#xff0c;只是时间有点长了&#xff0c;有些忘记。在这里做一下记录&#xff1a; 在要调试的源码的后面加上 // sourceURL debug.js 注释。 这样子&#xff0c;当浏览器检测到这个标记的时候…

mysql数据库邮箱什么类型_MySQL的数据类型介绍

MySQL的数据类型介绍 发布时间:2020-06-01 20:57:09 来源:亿速云 阅读:154 作者:鸽子 由于Mysql独有的特性和实现细节对性能的影响是很明显的,因为做好Mysql数据库的设计很关键。对于数据库设计,我们不得不提表字段的类型选择,由于Mysql支持的数据类型非常多,因此如何选…

rabbitmq 延迟队列_Delayed Message 插件实现 RabbitMQ 延迟队列

延迟队列是为了存放那些延迟执行的消息&#xff0c;待消息过期之后消费端从队列里拿出来执行。DLX TTL 方式存在的时序问题对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的&#xff0c;之前有介绍过如何使用 RabbitMQ 死信队列(DLX) TTL 的方式来模拟实现延迟队列…

JS - 按钮倒计时

效果&#xff1a; html代码&#xff1a; <input type"button" id"btn" value"点击获取效验码" />js代码&#xff1a; //倒计时var wait60;function time(o) {if (wait 0) {o.removeAttribute("disabled"); o.value&qu…

python安装报错类型_Python处理验证码第一篇(pytesser初探及报错处理)

前言&#xff1a;春节期间&#xff0c;无法全身心投入地去写爬虫&#xff0c;那就玩玩验证码吧&#xff0c;应该比较有趣&#xff01;首次接触验证码识别&#xff0c;用pytesser接触一下最简单的验证码先&#xff0c;代码参照&#xff1a;使用python以及工具包进行简单的验证码…

debian添加删除用户

debian添加删除用户增加普通用户命令&#xff1a;#adduser abc#passwd abc#exit用abc登录/etc/passwd中保存了用户信息LINUX创建用户的命令useradd -g test -d /home/test1 -s /etc/bash -m test1注解&#xff1a;-g 所属组 -d 家目录 -s 所用的SHELL删除用户命令userdel -r te…

bin文件怎么转换成文本文档_怎么把pdf文件转换成word文档?这样转很简单

在日常的学习、工作生活中&#xff0c;小伙伴们总少不了要对文件格式进行转换操作&#xff0c;例如把pdf文件转换成word文档。对于职场老手来说&#xff0c;这当然不算一个难度操作&#xff0c;甚至还很简单。但对于职场新人而言&#xff0c;找不对方法&#xff0c;可能操作起来…

python私有属性怎么定义_Python中定义私有属性的方法是()。

【判断题】请假条带有请求的性质,所以一般来说篇幅要尽量长一些,以示郑重;更多要用煽情性语句,以打动对方。( )【单选题】关于类和对象的关系,下列描述正确的是()。【选择】Трудоспособный возраст в России у женщин считается _…

GIT撤销相关命令

刚开始正式使用git不久&#xff0c;很多使用方法不是很了解&#xff0c;提交文件什么的总是提心吊胆的&#xff0c;生怕项目代码给自己弄乱&#xff0c;一开始为了保险还傻傻的copy一份放起来再做git提交。 今天学习了git撤销的一些命令。发现git作为一个版本控制系统&#xff…

delphi if多个条件_Python从入门到精通——一文读懂if语句用法

1、if语句概述if语句能够进行条件测试&#xff0c;并依据一定的条件进行具体的操作2、if语句条件测试if语句的核心是一个值为True或False的表达式&#xff0c;这种表达式称为条件测试。Python根据条件测试的值为True或False来决定是否执行if语句中的代码。2.1 条件测试是否相等…

mysql 实时性能_Mysql 实时查看性能

今天陪DBA 加班 又学会个新玩具mysqladmin -P3306 -uasd -pasdasd -hmysql.com -r -i 1 ext |\awk -F"|" \"BEGIN{ count0; }"\{ if($2 ~ /Variable_name/ && ((count)%20 1)){\print "----------|---------|--- MySQL Command Status --|--…

计算机网络——零碎知识点

1. T1载波&#xff1a;是专用电话连接、时分多路数字传输设施&#xff0c;其支持的数据传输速度为 1.544M 比特/秒。T1 线路实际上是由24个单独的通道组成的&#xff0c;每个通道支持 56K 比特/秒的传输速度。大多数的电话公司只允许用户购买这些被称为部分 T1 接入的单独通道的…

jquery交换数组元素位置_跟我一起学jQuery——第一集

《锋利的JQuery》第二版阅读笔记-第一章jQuery对象和DOM对象想学习jQuery&#xff0c;首先要学会区分jQuery对象和DOM对象。1)jQuery对象是用jQuery类库的选择器获得的对象。2)DOM对象是用传统(javascript)获得的对象。举个栗子//DOM对象var domO document.getElementById(&qu…