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

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

JpaRepository

这里写图片描述
这个接口有很多基本的方法。
这里写图片描述
继承的这个是用来分页的
这里写图片描述
这个是一下复杂查询的接口
这里写图片描述
这个分页又继承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<Account> 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";

    /**
     * <p>
     * 排序正序
     * <p>
     */
    protected String sord = "asc";
    setter、getter省略
}

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

@RequestMapping("/queryByPage")
public List<Account> 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<Account> example = Example.of(account);
    Optional<Account> optional = accountDao.findOne(example);

    return optional.orElse(null);
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
spring-boot-starter-jpaspring-boot-starter-jdbc是Spring Boot框架中用于数据库访问的两个常用依赖库,它们在数据库访问方式和功能上有一些区别。 spring-boot-starter-jpa是基于Java Persistence API(JPA)的依赖库,它提供了一种面向对象的方式来进行数据库访问。JPA是Java EE的一部分,它定义了一套标准的API和规范,用于实现对象关系映射(ORM)。使用spring-boot-starter-jpa可以方便地进行实体类与数据库表之间的映射,通过简单的注解和配置,可以实现数据库的增删改查操作。同时,spring-boot-starter-jpa还提供了一些高级特性,如事务管理、缓存等。 相比之下,spring-boot-starter-jdbc是基于Java Database Connectivity(JDBC)的依赖库。JDBC是Java语言访问关系型数据库的标准API,它提供了一套用于执行SQL语句和处理结果集的方法。使用spring-boot-starter-jdbc可以直接使用JDBC API进行数据库操作,需要手动编写SQL语句和处理结果集。相对于JPA,JDBC更加底层,更加灵活,可以直接操作数据库的细节。 总结一下区别: 1. 数据库访问方式spring-boot-starter-jpa使用面向对象的方式进行数据库访问,而spring-boot-starter-jdbc使用基于SQL的方式进行数据库访问。 2. 抽象程度:spring-boot-starter-jpa提供了更高级的抽象,通过注解和配置可以实现对象关系映射,而spring-boot-starter-jdbc需要手动编写SQL语句和处理结果集。 3. 功能特性:spring-boot-starter-jpa提供了一些高级特性,如事务管理、缓存等,而spring-boot-starter-jdbc相对较为简单,功能相对较少。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值