package com.example.demo;
import com.example.entity.UserJ;
import com.example.respository.UserJRespository;
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.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.test.context.junit4.SpringRunner;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestJpaCurd {
@Autowired
private UserJRespository userJRespository;
@Autowired
private EntityManager entityManager;
/**
* 插入或者是更新一条数据
*/
@Test
public void insertAndUpdate() {
UserJ userJ = new UserJ();
userJ.setUsername("alex222");
userJ.setEmail("wangzhilei@jd.com");
userJ.setId(1);
userJRespository.save(userJ);
}
/**
* 删除一条数据
*/
@Test
public void delete() {
userJRespository.deleteById(1);
}
/**
* 获取所有的数据
*
* @return
*/
@Test
public void getAll() {
List<UserJ> all = userJRespository.findAll();
for (UserJ userJ : all) {
System.out.println(userJ);
}
}
/**
* 查询所有并+分页+排序
* <p>
* 从0页开始
* 用最新的PageRequest.of来分页
*/
@Test
public void getOneData() {
Sort sort = new Sort(Sort.Direction.DESC, "id");
PageRequest pageRequest = PageRequest.of(0, 1, sort);
/**
* 使用匿名内部类
* 构建查询条件
* root 代表查询的对象
* criteriaBuilder 条件封闭器,如and or like 等
* criteriaQuery 查询的条件
*/
Specification<UserJ> specification = new Specification<UserJ>() {
@Override
public Predicate toPredicate(Root<UserJ> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
// 单个条件查询
// Predicate predicate = cb.equal(root.get("email"), "sqyinchao@jd.com");
/**
* 多条件查询
*/
List<Predicate> list = new ArrayList<>();
list.add(cb.equal(root.get("email"), "sqyinchao@jd.com"));
list.add(cb.equal(root.get("email"), "wangzhilei@jd.com"));
// 这里面放的是可变参数,则可以放一个数组进去,然后给拆分 相当于js中的...符号
Predicate[] predicates = new Predicate[list.size()];
return cb.or(list.toArray(predicates));
}
};
Page<UserJ> all = userJRespository.findAll(specification, pageRequest);
for (UserJ userJ : all) {
System.out.println(userJ);
}
}
}