文档章节

SpringDataJpa的简单入门使用

随风所欲
 随风所欲
发布于 2015/12/30 17:18
字数 1220
阅读 417
收藏 6
点赞 0
评论 0

        前段时间项目使用Spring Data JPA,本人初次涉猎对于新的技术总是热情满满,后面使用了一段时间总之有利有弊吧。现在把对于Spring Data JPA的使用心得写下来,欢迎同道人士指正交流。

        Spring Data JPA是由Spring提供的一个用于简化JPA开发的框架,可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。下面开始说如何使用 Spring Data JPA。

一、pom.xml引入jar包

其他相关的包我就不说了,上面的链接里也有,一般标准的springMVC项目都应该有那些包。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>1.8.0.RELEASE</version>
</dependency>

二、dao继承相应的接口

Spring Data JPA提供的接口,也是Spring Data JPA的核心概念:

1:Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。

2:CrudRepository :是Repository的子接口,提供CRUD的功能

3:PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能

4:JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。

5:JpaSpecificationExecutor:用来做负责查询的接口

6:Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可

上面几种接口的说明,每个接口封装的方法不一样,这里我们继承其中两个JpaRepository、JpaSpecificationExecutor

//JpaRepository<Account, String>中的Account为规定该持久层能操作的持久对象,String为主键类型
public interface AccountRepository extends JpaRepository<Account, String>,JpaSpecificationExecutor<Account> {
    public Account findByName(String name);
    public List<Acount> findByArea(String area);
    @Query("from Account where xxx = ?1")
    public Account findByXXX(String xxx);
}

三、service注入相应repository

也许大家注意到了我没有说关于repository的实现,这个我后面会说明,这就是DataJpa的魅力。

@Service
@Transactional
public Class AccountServiceImpl implements AccountService{
    @Autowired
    private AccountRepository accountRepository;
    
    public void repositoryTest(){
    //---------列举repository集成相关类后部分自带方法,更多自行查看文档------------------
        //通过ID查找account
        Account account = accountRepository.findOne(id);
        //保存或更新 account 
        //该方法会自动根据account对象里是否包含有id且数据库是否存在该id的对象去采取新增还是更新操作
        accountRepository.save(account);
        //删除指定account
        //除了ID也可直接传入实体 更多方式自行查看文档
        accountRepository.delete(id);
        //批量删除  更多方式自行查看文档
        accountRepository.deleteInBatch(account的集合)
        //查询所有account
        accountRepository.findAll();
    //---------调用自定义的方法---------
        Account account = accountRepository.findByName(name);
        List<Acount> list =  findByArea(rea);
        Account account = findByXXX(xxx);
    }
}

通过上面的代码可以看出通过repository继承JpaRepository、JpaSpecificationExecutor后我们可以很方便的进行CRUD操作。但findByName这种又是怎么实现查询的呢?

1.<Query creation from method names>

And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2
Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2
Like findByFirstnameLike … where x.firstname like ?1
OrderBy findByAgeOrderByLastnameDesc

… where x.age = ?1 order by x.lastname desc

以上我只列举了部分,具体查看官方文档:

http://docs.spring.io/springdata/jpa/docs/1.8.0.RELEASE/reference/html/#jpa.repositories

由此可见只要以findBy开头+对象的字段(首字母大写)+条件规则  的方法名 data jpa就会自动解析成响应的ql语句进行查询。

2.使用@Query注解

@Query是相比规范式方法名的做法更加灵活或且方便不知道规范式命名的人员更加方便的使用data jpa

public interface UserRepository extends JpaRepository<User, Long> { 
    //jpql语句格式
    @Query("select u from User u where u.firstname like %?1") 
    List<User> findByFirstnameEndsWith(String firstname); 
    //nativeQuery 可以让你使用sql语句来查询
    @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?0", nativeQuery = true) 
    User findByEmailAddress(String emailAddress);
    //@Param可以指定一个名称与query注解中的某个占位名称相对应
    @Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname") 
    User findByLastnameOrFirstname(@Param("lastname") String lastname, @Param("firstname") String firstname);
}

3.修改查询Modifying queries

@Modifying 
@Query("update User u set u.firstname = ?1 where u.lastname = ?2") 
int setFixedFirstnameFor(String firstname, String lastname);

以上就是对于Spring Data JPA的简单应用,它还有很多功能可以使用SpEL表达式、可以调用存储过程查询、以及后面我单独写一篇关于复杂多表以及分页要用到的Specifications查询等等,有兴趣的同志们可以多看看官方文档,本人英语老差了,都是一点点用工具翻译结合其他大神的帖子看的,那么累啊!

© 著作权归作者所有

共有 人打赏支持
随风所欲
粉丝 2
博文 9
码字总数 7237
作品 0
成都
恒宇少年/querydsl-chapter

#QueryDSL 简书相关系列文章源码 #一、环境配置 ###第一章:Maven环境下如何配置QueryDSL环境 #二、基础 ###第二章:整合QueryDSL与SpringDataJPA ###第三章:使用QueryDSL与SpringDataJPA完...

恒宇少年 ⋅ 04/19 ⋅ 0

第三章:使用QueryDSL与SpringDataJPA完成Update&Delete

我们上一章讲解了有关QueryDsl整合SpringDataJPA完成简单的单表条件查询,采用了两种模式进行查询一种是完全QueryDsl而另外一种则是整合的形式,既然单表的查询已经讲解接下来我们来看看Que...

恒宇少年 ⋅ 2017/07/05 ⋅ 0

第五十章:SpringBoot2.0新特性 - 岂止至今最简单redis缓存集成

自从升级到了版本后集成作为缓存就更为简单了,我们只需要配置相关的链接信息以及使用注解开启缓存,这样我们就直接可以在项目内使用缓存相关的内容。 由于最近这段时间一直在研发公司的持久...

恒宇少年 ⋅ 04/15 ⋅ 0

第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?

初升级版本,在已经使用的系统内还是存在一些兼容性的问题,有很多变化!!!也存在一些过时的方法、配置文件信息以及类,我们在之前版本的中可以使用抽象类来处理相关的配置,由于版本最低支...

恒宇少年 ⋅ 03/17 ⋅ 0

恒宇少年/spring-boot-chapter

简书整套文档以及源码解析 专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Cloud 核心技术 对Spring Cloud核心技术全面讲解 003 Quer...

恒宇少年 ⋅ 04/19 ⋅ 0

第五十二章:基于SpringBoot2使用Rest访问MongoDB数据

在之前项目中我们想要读取内的内容需要使用来完成数据的,那如果我们想要通过的形式获取内的数据就更麻烦了,还需要自行去创建对应的控制器,然后使用从内读取出数据后返回给前端。 在上一章...

恒宇少年 ⋅ 04/22 ⋅ 0

第四章:使用QueryDSL与SpringDataJPA实现多表关联查询

对于业务逻辑复制的系统来说都存在多表关联查询的情况,查询的返回对象内容也是根据具体业务来处理的,我们本章主要是针对多表关联根据条件查询后返回单表对象,在下一章我们就会针对多表查询...

恒宇少年 ⋅ 2017/07/09 ⋅ 0

第一章:Maven环境下如何配置QueryDSL环境

QueryDSL是一个通用的查询框架,框架的核心原则是创建安全类型的查询,开始QueryDSL仅支持Hibernate(HQL),在不断开源人士加入QueryDSL团队后,陆续发布了针对JPA,JDO,JDBC,Lucene,Hib...

恒宇少年 ⋅ 2017/07/01 ⋅ 0

第五十一章:基于SpringBoot2 & MongoDB完成自动化集成

在企业级项目中一般用于存储文档信息、图片资源等,的内容完全是以 字符串的形式进行存储的,所以我们在获取数据时通过简单的 就可以完成与项目内的实体类转换,不过这个过程是自动的,不需要...

恒宇少年 ⋅ 04/16 ⋅ 0

spring data jpa

最近在学习springboot,持久层操作使用了springdatajpa,我有一个疑问,我之前接触过jpa,项目中有一个persistence.xml管理实体类,实体类使用注解,创建entityManager操作数据库既可,大致是...

樱木花道VS康 ⋅ 05/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 48分钟前 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部