Spring-boot系列(10):JPA常用查询方式

在之前的spring-boot-jpa项目中,简单的使用了jpa查询了一下数据库。

JpaRepository

Spring-boot系列(10):JPA常用查询方式_第1张图片
这个接口有很多基本的方法。
Spring-boot系列(10):JPA常用查询方式_第2张图片
继承的这个是用来分页的
Spring-boot系列(10):JPA常用查询方式_第3张图片
这个是一下复杂查询的接口
Spring-boot系列(10):JPA常用查询方式_第4张图片
这个分页又继承CrudRepository是基本的增删改查

常用方法:

  • 1.save update差不多
@RequestMapping(value = "save", method = RequestMethod.GET)
public String postAccount(@RequestParam(value = "name") String name,
                          @RequestParam(value = "money") double money) {
    Account account = new Account();
    account.setMoney(money);
    account.setName(name);
    Account account1 = accountDao.save(account);
    return account1.toString();
  • 2.delete
@RequestMapping("/delete")
public void delete(String id) {
    accountDao.deleteById(Integer.valueOf(id));
}
  • 3.查询
public interface AccountDao  extends JpaRepository<Account,Integer> {
    @Query(value = "select * from account where name = ?1", nativeQuery = true)
    public List nativeQuery(String name);
}

@Query
nativeQuery = true 表示使用原生sql查询。

配合事务和编辑可以执行修改删除操作

@Transactional
@Modifying
@Query(value = "delete from account where name = ?1", nativeQuery = true)
public void deleteByName(String name);
  • 4.分页

创建base实体类

public class BaseAccountPage implements Serializable {
    /**
     * 默认页码
     */
    private int page = 1;
    /**
     * 分页数量
     */
    private int size = 10;

    /**
     * 排序名称
     */
    private String index = "name";

    /**
     * 

* 排序正序 *

*/ protected String sord = "asc"; setter、getter省略 }

控制器:
其中PageRequest的sort参数可以没有,就默认不排序了。

@RequestMapping("/queryByPage")
public List queryByPage(int pageNum) {
    BaseAccountPage page = new BaseAccountPage();
    page.setPage(pageNum);
    page.setSize(5);
    page.setSord("desc");
    page.setIndex("id");


    System.out.println(page.toString());
    //获取排序对象
    Sort.Direction direction = Sort.Direction.ASC.toString().equalsIgnoreCase(page.getSord()) ? Sort.Direction.ASC : Sort.Direction.DESC;
    //根据排序对象排序
    Sort sort = new Sort(direction, page.getIndex());

    //创建分页对象
    PageRequest pageRequest = new PageRequest(page.getPage()-1, page.getSize(), sort);
    return accountDao.findAll(pageRequest).getContent();

}
  • 5.自定义实例查询

当然也可以直接使用原生sql查询

@RequestMapping("/findByParam")
public Account findByParam(int id) {

    // getOne返回引用对象 findOne返回实体,Optional 是一个包含或着不包含一个非空值的容器对象。
    //getOne查不到报错。查到又不可以直接json返回,原因不详。
    Account one = accountDao.getOne(3);
    System.out.println(one.toString());

    //根据  `实例` 查询Example
    //这里条件会自动把int、duble的默认为0,注意一下。
    Account account = new Account();
    account.setId(10);
    account.setMoney(12.0);

    // 如果一个值存在,isPresent()将会返回true 并且 get() 将会返回所对应的值.
    Example example = Example.of(account);
    Optional optional = accountDao.findOne(example);

    return optional.orElse(null);
}

你可能感兴趣的:(SpringBoot)