SpringDataJpa的简单入门使用

        前段时间项目使用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>

AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2
LikefindByFirstnameLike… where x.firstname like ?1
OrderByfindByAgeOrderByLastnameDesc

… 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查询等等,有兴趣的同志们可以多看看官方文档,本人英语老差了,都是一点点用工具翻译结合其他大神的帖子看的,那么累啊!

转载于:https://my.oschina.net/u/2434456/blog/592742

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java框架,它提供了一种简化Java开发的方式。它的目标是通过依赖注入(DI)和向切面编程(AOP)来降低代码的耦合性,提高开发效率和系统的可维护性。从入门到实战,你可以按照以下步骤进行学习和应用Spring框架: 1. 学习基础知识:了解Spring框架的核心概念,包括依赖注入、控制反转、面向切面编程等。可以通过阅读官方文档、参考书籍或在线教程来学习。 2. 搭建开发环境:安装Java开发环境(JDK)和集成开发环境(IDE),如Eclipse、IntelliJ IDEA等。然后下载并配置Spring框架。 3. 创建项目:使用Spring框架创建一个简单Java项目。可以使用Spring Initializr(Spring的快速启动工具)创建一个基本的Spring Boot项目。 4. 配置和使用Spring的核心功能:学习如何通过注解或XML配置来使用Spring的核心功能,如依赖注入、Bean的生命周期管理、AOP等。 5. 数据访问与持久化:学习如何使用Spring框架进行数据库操作和持久化,可以使用Spring JDBC、Spring Data JPA或MyBatis等。 6. Web开发:学习如何使用Spring MVC构建Web应用程序。了解基本的请求处理、页面渲染、表单处理等。 7. 集成其他技术:学习如何集成其他常用的技术和框架,如Spring Security(安全认证和授权)、Spring Cloud(构建分布式系统)、Spring Integration(集成不同系统之间的数据交互)等。 8. 测试和调试:学习如何使用Spring框架进行单元测试和集成测试,并掌握调试技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值