jpa經常使用方法

package com.itheima;java

import com.itheima.dao.UserDao;
import com.itheima.domain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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.data.jpa.domain.Specification;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;spring

import javax.persistence.criteria.*;
import java.util.List;
import java.util.Optional;dom

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:beans.xml")
public class AppTest {
@Autowired
private UserDao userDao;
@Test
@Transactional
@Rollback(false)
public void testFindOne1() {
//查詢用戶 條件 select * from user where username='xiaoming';
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
//構建 Predicate 查詢條件 包含三部分 列名 方式 參數值ide

//root 表明的該實體類屬性根對象 找root 獲取該實體類某個屬性
//CriteriaQuery 不解釋 用不着
//criteriaBuilder 標準查詢條件構建器ui


//套路:
//1.找root 拿屬性
//2. 找criteriaBuilder 調對應方法 構建查詢條件spa

Path<Object> username = root.get("username");xml

Predicate predicate = criteriaBuilder.equal(username, "xiaoming");對象

return predicate;
}
};排序


Optional<User> optional = userDao.findOne(spe);
System.out.println(optional.get());
}ci

@Test
@Transactional
@Rollback(false)
public void testFindOne2() {
//查詢用戶 條件 select * from user where age>10;
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
//獲取root age屬性
Path<Integer> age = root.get("age");
//criteriaBuilder 構建
Predicate predicate = criteriaBuilder.gt(age, 10);

return predicate;
}
};


Optional<User> optional = userDao.findOne(spe);
System.out.println(optional.get());
}

@Test
@Transactional
@Rollback(false)
public void testFindOne3() {
//查詢用戶 條件 select * from user where username='小明' and password='123';
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<Object> username = root.get("username");

Predicate predicate1 = criteriaBuilder.equal(username, "xiaoming");

Path<Object> password = root.get("password");

Predicate predicate2 = criteriaBuilder.equal(password, "123");

Predicate and = criteriaBuilder.and(predicate1, predicate2);
Predicate or = criteriaBuilder.or(predicate1, predicate2);

return or;
}
};


Optional<User> optional = userDao.findOne(spe);
System.out.println(optional.get());
}

@Test
@Transactional
@Rollback(false)
public void testFindAll1() {
//查詢用戶 條件 select * from user where username like '%xiao%';
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> username = root.get("username");

Predicate like = criteriaBuilder.like(username, "%xiao%");


return like;
}
};


List<User> users = userDao.findAll(spe);
users.forEach(u-> System.out.println(u));
}

@Test
@Transactional
@Rollback(false)
public void testFindSort1() {
//查詢用戶 條件 select * from user where username like '%xiao%' order by age desc;
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> username = root.get("username");

Predicate like = criteriaBuilder.like(username, "%xiao%");


return like;
}
};
Sort sort=new Sort(Sort.Direction.DESC,"age");

List<User> users = userDao.findAll(spe, sort);
users.forEach(u-> System.out.println(u));

}
@Test
@Transactional
@Rollback(false)
public void testFindSort2() {
//查詢用戶 條件 select * from user where username like '%xiao%' order by age desc;
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> username = root.get("username");

Predicate like = criteriaBuilder.like(username, "%xiao%");


return like;
}
};
Sort sort=new Sort(Sort.Direction.DESC,"age","id");

List<User> users = userDao.findAll(spe, sort);
users.forEach(u-> System.out.println(u));

}

@Test
@Transactional
@Rollback(false)
public void testFindSort3() {
//查詢用戶 條件 select * from user where username like '%xiao%' order by age desc;
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> username = root.get("username");

Predicate like = criteriaBuilder.like(username, "%xiao%");


return like;
}
};
Sort sort1=new Sort(Sort.Direction.ASC,"age");
Sort sort2=new Sort(Sort.Direction.DESC,"id");

//合併排序
Sort sort = sort1.and(sort2);

List<User> users = userDao.findAll(spe, sort);
users.forEach(u-> System.out.println(u));

}

@Test
@Transactional
@Rollback(false)
public void testFindPage() {
//查詢用戶 條件 select * from user where username like '%xiao%' limit 0,2;
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> username = root.get("username");

Predicate like = criteriaBuilder.like(username, "%xiao%");


return like;
}
};
//參數 第一個參數 表明的頁碼 第二參數每頁的個數
Pageable pageable=PageRequest.of(1,2);

Page<User> page = userDao.findAll(spe, pageable);


List<User> users = page.getContent();
System.out.println("當前頁的數據:");
users.forEach(u-> System.out.println(u));
long totalElements = page.getTotalElements();
System.out.println("總個數:"+totalElements);
int totalPages = page.getTotalPages();
System.out.println("總頁數:"+totalPages);

 

}


@Test
@Transactional
@Rollback(false)
public void testFindPageAnd() {
//查詢用戶 條件 select * from user where username like '%xiao%' order by age asc,id desc limit 0,2;
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> username = root.get("username");

Predicate like = criteriaBuilder.like(username, "%xiao%");


return like;
}
};

Sort sort1=new Sort(Sort.Direction.ASC,"age");
Sort sort2=new Sort(Sort.Direction.DESC,"id");

//合併排序
Sort sort = sort1.and(sort2);
//參數 第一個參數 表明的頁碼 第二參數每頁的個數
Pageable pageable=PageRequest.of(1,2,sort);

 

 

Page<User> page = userDao.findAll(spe, pageable);


List<User> users = page.getContent();
System.out.println("當前頁的數據:");
users.forEach(u-> System.out.println(u));
long totalElements = page.getTotalElements();
System.out.println("總個數:"+totalElements);
int totalPages = page.getTotalPages();
System.out.println("總頁數:"+totalPages);

 

}

@Test
@Transactional
@Rollback(false)
public void testFindCount() {
//查詢用戶 條件 select count(id) from user where username like '%xiao%' ;
Specification<User> spe=new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> username = root.get("username");

Predicate like = criteriaBuilder.like(username, "%xiao%");


return like;
}
};


long count = userDao.count(spe);
System.out.println(count);


}

}

相關文章
相關標籤/搜索