Spring Data JPA学习一:整体认识JPA

Spring Data JPA学习一:整体认识JPA

1. 整体认识JPA

市面上的ORM(Object Relational Mapping 对象映射关系)框架对比
MyBatis:着力于POJO与SQL之间的映射关系,可以进行更为细致的SQL,使用起来十分灵活方便,上手简单,容易掌握,所以深受开发者喜欢,目前市场占有率很高,比较适合互联网应用公司的API场景。
Hibernate :对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操作数据库,着力于对象与对象之间的关系,比较适合企业级地应用系统开发。
Spring Data JPA:可以理解为JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL查询语言,属于Spring整个生态系统的一部分。JPA上手简单,开发效率高,对对象的支持比较好,又有很大的灵活性,市场的认可度越来越高。
JPA是 Java Persistence API的简称,中文名称为Java持久层API,是JDK5.0注解或XML描述对象—关系表的映射关系,并将运行期的尸体对象持久化到数据库中。
Spring Data操作的主要特性
提供模板操作,如Spring Data Redis和 Spting Data Riak。
强大的Repository和定制的数据存储对象的抽象映射。
对数据访问对象的支持。

2.JPA基础查询方法

Spring Data Common 的 Repository,是Spring Data里面做数据库操作的最底层的抽象接口、最顶级的父类,源码里面其实什么方法都没有,仅仅起到一个标识的作用。此接口主要作为标记接口捕获要使用的类型,并帮助你发现扩展此接口的接口。
Repository的源码如下:


package org.springframework.data.repository;

import org.springframework.stereotype.Indexed;

@Indexed
public interface Repository<T, ID> {
}

这个接口定义了所有Repository操作的实体和ID两个泛型参数。我们不需要继承任何接口,只要继承这个接口,就可以使用Spring JPA里面提供的很多约定的方法查询和注解查询。
CrudRepository方法详解

package org.springframework.data.repository;

import java.util.Optional;

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);//(1)
    <S extends T> Iterable<S> saveAll(Iterable<S> var1);//(2)
    Optional<T> findById(ID var1);//(3)
    boolean existsById(ID var1);//(4)
    Iterable<T> findAll();//(5)
    Iterable<T> findAllById(Iterable<ID> var1);//(6)
    long count();//(7)
    void deleteById(ID var1);//(8)
    void delete(T var1);//(9)
    void deleteAll(Iterable<? extends T> var1);//(10)
    void deleteAll();//(11)
}

(1)保存实体方法。
(2)批量保存。实现方法就是for循环调用(1)的save方法。
(3)根据主键查询实体。
(4)根据主键判断实体是否存在。
(5)查询实体的所有列表。
(6)分局主键列表查询实体列表。
(7)查询总数。
(8)根据主键删除
这里特别强调一下delete和save方法,因为在实际工作中有的人会画蛇添足,自己先去查询再做判断处理,其实Spring JPA底层都已经考虑到了。
CrudRepository interface的使用示例

public interface UserRepository extends CrudRepository<User,Integer> {

}
    @Autowired
    private UserRepository userRepository;

    @GetMapping("add")
    public void addUser(){
        User user = new User();
        user.setUsername("2");
        user.setPassword("2");
        userRepository.save(user);
    }

    @GetMapping("addAll")
    public void addAll(){
        List<User> list = new ArrayList<>();
        for (int i=0 ; i<10 ; i++){
            User user = new User();
            user.setUsername(String.valueOf(i));
            user.setPassword(String.valueOf(i));
            list.add(user);
        }
        System.out.println(list.toString());
        for (int i = 0 ; i<list.size() ; i++) {
            userRepository.save(list.get(i));
        }
    }

    @GetMapping("findOne")
    public void findOne(){
        Optional<User> user = userRepository.findById(1);
        System.out.println(user.toString());
    }
    @GetMapping("findAll")
    public void findAll(){
        List<User> users = userRepository.findAll();
        for (User user:users) {
            System.out.println(user.toString());
        }
    }

    @GetMapping("count")
    public void count(){
        long l = userRepository.count();
        System.out.println(l);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值