四、集成Spring Data JPA

集成Spring Data JPA


来自于《Spring Boot微服务项目实战》该书所记录的笔记。
JPA(Java Persistence API)意即Java持久化API,通过在Spring Boot中集成Spring Data JPA来实现基本增删改查功能,以及自定义查询方法等。

一、引入依赖

在pom文件中引入如下代码:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

二、继承JpaRepository

接着在目录src\main\java\com\example\demo\repository\开发一个AyUserRepository类,代码如下:

public interface AyUserRepository extends JpaRepository<AyUser,String> {
    
    }

在AyUser实体中添加@Entity@Id注解,需要注意的是将Hibernate更新到4.3以上的时候,不再使用@Table(name = "ay_user")注解,只需要在@Entity变为@Entity(name = "ay_user")即可,代码如下:
在这里插入图片描述

  • @Entity:每个持久化POJO类都是一个实体Bean,通过@Entity来声明。
  • @Id:指定表的主键。

三、服务层类实现

服务层接口类:src\main\java\com\example\demo\service\AyUserService.java
具体代码如下:

package com.example.demo.service;
import com.example.demo.AyUser;
import java.util.List;

public interface AyUserService {
    
    
    AyUser findById(String id);
    List<AyUser> findAll();
    AyUser save(AyUser ayUser);
    void delete(String id);
}

实现类:src\main\java\com\example\demo\service\impl\AyUserServiceImpl.java
具体代码如下:

package com.example.demo.service.impl;

import com.example.demo.AyUser;
import com.example.demo.service.AyUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

@Service
public class AyUserServiceImpl implements AyUserService  {
    
    
    @Resource
    private AyUserRepository ayUserRepository;
    @Override
    public AyUser findById(String id) {
    
    
        return ayUserRepository.findById(id).get();;
    }
    @Override
    public List<AyUser> findAll() {
    
    
        return ayUserRepository.findAll();
    }
    @Override
    public AyUser save(AyUser ayUser) {
    
    
        return ayUserRepository.save(ayUser);
    }
    @Override
    public void deleteById(String id) {
    
    
        ayUserRepository.deleteById(id);
    }
}

四、增删改查分页简单实现

在AyUserService.java添加分页代码如下:

Page<AyUser> findAll(Pageable pageable);
  • Pageable:查询时只要传入一个Pageable接口的实现类,指定pageNumber和PageSize即可,分别为第几页和该页大小
  • Page:分页查询结果会封装在该类中,Page接口实现Slice接口,通过调用getTotalPages和getContent等方法,可获得总页数和查询记录。
    接着我们在类AyUserServiceImpl中实现该方法,代码如下:
@Override
public Page<AyUser> findAll(Pageable pageable) {
    
    
	return ayUserRepository.findAll(pageable);
}

五、自定义查询方法

在AyUserRepository类中添加自定义查询方法,代码如下:

    /*
     * 描述:通过名字相等查询,参数为name
     * 相当于:select u from ay_user where u.name = ?1
     * */
    List<AyUser> findByName(String name);
    /*
     * 描述:通过名字like查询,参数为name
     * 相当于:select u from ay_user where u.name like ?1
     * */
    List<AyUser> findByNameLike(String name);
    /*
     * 描述:通过主键ID集合查询,参数为ID集合
     * 相当于:select u from ay_user u where id in (?,?,?)
     * @param ids
     * */
    List<AyUser> findByIdIn(Collection<String> ids);

实际上,Spring Data JPA会根据代码翻译成相关的SQL语句进行数据库查询,接着我们在AyUserService.java和AyUserServiceImpl.java调用它们,代码如下:
AyUserService.java:

扫描二维码关注公众号,回复: 12409010 查看本文章
    //自定义查询方法
    List<AyUser> findByName(String name);
    List<AyUser> findByNameLike(String name);
    List<AyUser> findByIdIn(Collection<String> ids);

AyUserServiceImpl.java:

    @Override
    public List<AyUser> findByName(String name) {
    
    
        return ayUserRepository.findByName(name);
    }
    @Override
    public List<AyUser> findByNameLike(String name) {
    
    
        return ayUserRepository.findByNameLike(name;
    }
    @Override
    public List<AyUser> findByIdIn(Collection<String> ids) {
    
    
        return ayUserRepository.findByIdIn(ids);
    }

六、测试开发用例

在DemoApplicationTests类中添加如下代码:

package com.example.demo;

import com.example.demo.service.AyUserService;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;


@SpringBootTest
class DemoApplicationTests {
    
    
    @Resource
    private AyUserService ayUserService;
    @Test
    public void testRepository() {
    
    
        //查询所有数据
        List<AyUser> userList = ayUserService.findAll();
        System.out.println("findAll()查询所有数据:"+userList.size());
        //通过name查询数据
        List<AyUser> userList2 = ayUserService.findByName("Jadore");
        System.out.println("findByName()通过name查询数据:"+userList2.size());
        Assert.assertTrue("data error!",userList2.get(0).getName().equals("Jadore"));
        //通过name模糊查询数据
        List<AyUser> userList3 = ayUserService.findByName("%ad%");
        System.out.println("findByNameLike()通过name模糊查询数据:"+userList3.size());
        Assert.assertTrue("data error!",userList3.get(0).getName().equals("Jadore"));
        //通过ID列表查询数据
        List<String> ids = new ArrayList<String>();
        ids.add("1");
        ids.add("2");
        List<AyUser> userList4 = ayUserService.findByIdIn(ids);
        System.out.println("findByNameLike()通过name模糊查询数据:"+userList4.size());
        //分页查询数据
        Pageable pageable = PageRequest.of(0,10);
        Page<AyUser> userList5 = ayUserService.findAll(pageable);
        System.out.println("page findAll()分页查询数据:"+userList5.getTotalPages()+"/"+userList5.getSize());
        AyUser ayUser = new AyUser();
        ayUser.setId("3");
        ayUser.setName("分页添加的name");
        ayUser.setPassword("123456");
        ayUserService.save(ayUser);
        ayUserService.deleteById("3");
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44047795/article/details/110849714