随笔3

Posted lukizzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随笔3相关的知识,希望对你有一定的参考价值。

在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("[email protected]");
        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("[email protected]");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("esdong");
        user.setAccount("10000");
        user.setEmail("[email protected]");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("qinhongfei");
        user.setAccount("10000");
        user.setEmail("[email protected]");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("huizhang");
        user.setAccount("10000");
        user.setEmail("[email protected]");
        user.setPassword("123456");
        users.add(user);
        user = new User();
        user.setName("caican");
        user.setAccount("10000");
        user.setEmail("[email protected]");
        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列表来查询时遇到一个问题:

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

[[email protected], [email protected], [email protected], [email protected], [email protected], [email protected]

原因是在控制台打印出来的是列表属性而不是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的主要内容,如果未能解决你的问题,请参考以下文章

sublime 3 随笔

VSCode自定义代码片段3——url大全

VSCode自定义代码片段3——url大全

VSCode自定义代码片段3——url大全

冲刺随笔3

Beta冲刺-用心聚落步