码迷,mamicode.com
首页 > 其他好文 > 详细

随笔3

时间:2018-08-01 22:29:42      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:dir   接口   用途   技术分享   随笔   资料   depend   exists   批量   

在springboot项目中使用JPA

Repository:仅仅是一个标识,表明任何继承它的均为仓库接口类,方便Spring自动扫描识别 
CrudRepository:继承Repository,实现了一组CRUD相关的方法 
PagingAndSortingRepository:继承CrudRepository,实现了一组分页排序相关的方法 
JpaRepository:继承PagingAndSortingRepository,实现一组JPA规范相关的方法 
JpaSpecificationExecutor:比较特殊,不属于Repository体系,实现一组JPA Criteria查询相关的方法。

先添加依赖:

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

CrudRepository接口:

CrudRepository接口提供了最基本的增删改查能力,从各个方法的命名就很容易猜出用途

<S extends T> S save(S var1);  //保存指定的实体
<S extends T> Iterable<S> save(Iterable<S> var1);   //保存实体集合

    T findOne(ID var1);   //返回单个实体

    boolean exists(ID var1);  //判断是否存在

    Iterable<T> findAll();  //返回全部实体

    Iterable<T> findAll(Iterable<ID> var1); //返回集合<ID>的全部实体

    long count();  //返回实体数量

    void delete(ID var1);  

    void delete(T var1);

    void delete(Iterable<? extends T> var1);

    void deleteAll();

 PagingAndSortingRepository

PagingAndSortingRepository继承自CrudRepository接口,提供排序以及分页查询能力。这里需要讲一下Sort和Pageable类,非常重要,在查询中经常会用到(貌似也就这两个了)。

public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort sort);       //排序,不执行分页
    Page<T> findAll(Pageable pageable);  //分页
}

举个栗子:

//进入 用户类别 的第二页(每一页的条目是20) ,可以像这样来分页
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(new PageRequest(1, 20));

需要注意的是:从0页开始.

sort:

Sort主要为了实现排序功能

栗子:

@Test
public void testPage() {
    Sort sort = new Sort(Sort.Direction.DESC, "id");
    List<User> list = userService.findAll(sort);
    for(User u : list) {
        System.out.println(u.getUserName());
    }
}

Pageabl:

在敲码的时候遇到个问题:

技术分享图片

 方法过时,查阅网上资料后得到解决办法:

    public void testFindPage(){
        Sort sort = new Sort(Sort.Direction.ASC,"id");
        Pageable pageable =PageRequest.of(1,2, sort);
        Page<User> users = dao.findAll(pageable);
        System.out.println(users);
    }

 

 

附上参照众多博文后写的jpa的一些demo

package com.lk.jpademo.dao;

import com.lk.jpademo.domain.User;
import net.minidev.json.JSONArray;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * @Author: Lukizzz
 * @Date: 2018/8/1 14:34
 * @Description:
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {
    @Autowired
    private UserRepository dao;

    @Test//保存
    public void testSave(){
        User user = new User();
        user.setName("luke");
        user.setAccount("10000");
        user.setEmail("luke@163.com");
        user.setPassword("123456");
        dao.save(user);
    }
    @Test//批量保存
    public void testSave1(){
        List<User> users = new ArrayList<User>();
        User user = new User();
        user.setName("tanjie");
        user.setAccount("10000");
        user.setEmail("tanjie@.com");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("esdong");
        user.setAccount("10000");
        user.setEmail("esdong@.com");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("qinhongfei");
        user.setAccount("10000");
        user.setEmail("qinhongfei@.com");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("huizhang");
        user.setAccount("10000");
        user.setEmail("huizhang@.com");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("caican");
        user.setAccount("10000");
        user.setEmail("caican@.com");
        user.setPassword("123456");
        users.add(user);
        dao.saveAll(users);
    }

    @Test//修改id=1的用户密码
    public void testUpdate(){
        Optional<User> user = dao.findById(1);
        User user1 = user.get();
        user1.setPassword("123123");
    }

    @Test//删除id=2的用户的信息
    public void testDelete(){
        dao.deleteById(2);
    }

    @Test//查询全部用户
    public void testFindAll(){
        List<User> users = dao.findAll();
        System.out.println(users);
        //System.out.println(JSONArray.toJSONString(users));
    }

    @Test//判断指定的id对象是否存在
    public void testIsExist(){
        boolean isExist = dao.existsById(8);
        System.out.println(isExist);
    }

    @Test//通过id列表来查询
    public void testFindUserByIds(){
        List<Integer> listIds =new ArrayList<Integer>();
        listIds.add(2);
        listIds.add(4);
        listIds.add(7);
        List<User> users = dao.findAllById(listIds);
        System.out.println(JSONArray.toJSONString(users));
    }

    @Test//查找按id正序排列的第二页的用户
    public void testFindPage(){
        Sort sort = new Sort(Sort.Direction.ASC,"id");
        Pageable pageable =PageRequest.of(1,2, sort);
        Page<User> users = dao.findAll(pageable);
        System.out.println(users);
    }


}

查询全部用户和通过id列表来查询时遇到一个问题:

在控制台输出的不是正确的格式,而是这样的:

[com.lk.jpademo.domain.User@74fb5b59, com.lk.jpademo.domain.User@66451058, com.lk.jpademo.domain.User@3db6dd52, com.lk.jpademo.domain.User@1e92c3b6, com.lk.jpademo.domain.User@6ef4cbe1, com.lk.jpademo.domain.User@207d

原因是在控制台打印出来的是列表属性而不是json格式,找到了两种办法去解决

1:

System.out.println(JSONArray.toJSONString(users))

2.添加tostring方法

   @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", account=‘" + account + ‘\‘‘ +
                ", name=‘" + name + ‘\‘‘ +
                ", password=‘" + password + ‘\‘‘ +
                ", email=‘" + email + ‘\‘‘ +
                ‘}‘;
    }

 

明后天整理出自定义操作规则,用sql语句的学习笔记

随笔3

标签:dir   接口   用途   技术分享   随笔   资料   depend   exists   批量   

原文地址:https://www.cnblogs.com/Lukizzz/p/9403729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!