SpringDataJpa的详细使用

findOne

  • 示例代码
 @Test
    public void testFindOne(){
        Person person = personDao.findOne(1);
        System.out.println(person);
    }

findAll

  • 示例代码
 @Test
    public void testFindAll(){
        List<Person> personList = personDao.findAll();
        for (Person person : personList) {
            System.out.println(person);
        }
    }

增 删 改

新增

底层就是调用了JPA的merge方法,当主键有值的时候就修改,没有值的时候就新增

  • 示例代码
 @Test
    public void testInsert(){
        Person person = new Person();
        person.setName("赵之人");
        person.setGender(1);
        person.setBirthday(new Date());
        person.setPersonAddr("元大都");
        Person save = personDao.save(person);
        System.out.println(save);
    }

删除

  • 示例代码
 @Test
    public void testDelete(){
        personDao.delete(11);
    }

更改

  • 示例代码
@Test
   public void testUpdate(){
        Person person = new Person();
        person.setPersonId(10);
        person.setName("小昭");
        person.setPersonAddr("明教");
        personDao.save(person);
   }

分页查询

测试分页查询
在hibernate中
setFirstResult 设置从第几行开始提取数据(索引从0开始)
setMaxResults 设置提取多少行数据(每页显示多少行)

personPage.forEach(person -> System.out.println(person));新学的for循环

  • 示例代码
/*
   * 测试分页查询
   * 在hibernate中
   * setFirstResult 设置从第几行开始提取数据(索引从0开始)
   * setMaxResults 设置提取多少行数据(每页显示多少行)
   * */
   @Test
   public void  testPage(){
       //两个参数page:页数(0开始),size:每页条数
       Pageable pageable=new PageRequest(0,5);
       Page<Person> personPage = personDao.findAll(pageable);
       System.out.println(personPage.getTotalElements());//总条数
       System.out.println(personPage.getTotalPages());//总页数
       System.out.println(personPage.getSize());//每页显示的行数
       System.out.println(personPage.getNumberOfElements());//当前页有多少条数据
       System.out.println(personPage.getNumber());//当前页码
       List<Person> content = personPage.getContent();//当前页的数据集合


       personPage.forEach(person -> System.out.println(person));
   }

分页查询加排序

  • 示例代码
@Test
   public void testPageOrder(){
       //三个参数page:页数,size:每页条数 sort:排序规则
       /*
       * 如果不做排序,默认会以主键id升序排序
       * Sort.Direction direction 这个一个枚举,表示升序或者降序
       * Sting property  排序的字段名称
       * 生成 order by id desc
       * */
       Sort.Order order=new Sort.Order(Sort.Direction.DESC,"personId");
       Sort sort=new Sort(order);
        //上述代码也可以简化成这样的
       //Sort sort = new Sort(Sort.Direction.DESC,"name");
       Pageable pageable=new PageRequest(0,5,sort);
       Page<Person> personPage = personDao.findAll(pageable);
       personPage.forEach(person -> System.out.println(person));
   }

简单高级查询

简单高级查询的时候只需要在dao层在定义我们需要的抽象方法即可

①抽象方法名称规则如下:方法名称必须以findBy或者findAllBy开头
②findBy或者findAllBy后面紧跟domain实体类中的字段名称
③遵从驼峰命名
④属性名称后面紧跟SQL语句中的条件符号:
⑤多个条件可以用And或者Or来连接
⑥方法的参数个数必须和条件的个数匹配

  • 条件符号说明
    在这里插入图片描述

  • 示例代码

public interface PersonDao extends JpaRepository<Person,Integer> {
    Person findAllByNameLike(String name);
    List<Person> findAllByNameLikeAndPersonIdEquals(String name,Integer personId);
}
  • 测试类
   @Test
   public void testSelectByNameAndPersonAddr(){
       Person person = personDao.findAllByNameLike("%周%");
       System.out.println(person);
   }

使用@Query注解来完成高级查询

通过接口中的方法名称来指定高级查询条件的方式其实很明显
①方法名称的规则复杂
②方法名称太长,不太方便

  • 示例1

@Query(" from Person")写成这样的方式,那么只能写成HQL语句

public interface PersonDao extends JpaRepository<Person,Integer> {
    @Query(" from Person")
    List<Person> findAll();
}
  • 示例2

@Query(value = “select *from person”,nativeQuery = true)写成这样的方式,就可以使用原生的SQL进行查询了
nativeQuery = true 表示是原生SQL,默认是false
value里面是SQL语句

public interface PersonDao extends JpaRepository<Person,Integer> {
    @Query(value = "select *from person",nativeQuery = true)
    List<Person> findAll();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值