第三部分
复杂查询-SpecTest
package org.example.test;
import org.example.dao.CustomerDao;
import org.example.entity.Customer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.persistence.criteria.*;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class SpecTest {
@Autowired
private CustomerDao customerDao;
@Test
public void testSpec(){
Specification<Customer> spec = new Specification<Customer>() {
@Override
public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
return null;
}
};
customerDao.findOne(spec);
}
@Test
public void testSpec1(){
Specification<Customer> spec = (root,query,cb)->{
Path<Object> custName = root.get("custName");
Predicate predicate = cb.equal(custName, "海之蓝");
return predicate;};
Customer one = customerDao.findOne(spec);
System.out.println(one);
}
@Test
public void testSpec2(){
Customer customer = customerDao.findOne((root, query, cb) -> {
Path<Object> custName = root.get("custName");
Predicate predicate = cb.equal(custName, "海之蓝");
return predicate;
});
System.out.println(customer);
}
@Test
public void testSpec3(){
Customer customer= customerDao.findOne((root,query,cb)->{
Path<Object> custName = root.get("custName");
Path<Object> custIndustry = root.get("custIndustry");
Predicate con1 = cb.equal(custName, "青岛啤酒");
Predicate con2 = cb.equal(custIndustry, "啤酒行业");
Predicate predicate = cb.and(con1, con2);
return predicate;
});
System.out.println(customer);
}
@Test
public void testSpec4(){
Specification<Customer> spec = (root, query, builder) -> {
Path<Object> custName = root.get("custName");
Expression<String> expression = custName.as(String.class);
Predicate predicate = builder.like(expression, "%蓝");
return predicate;
};
List<Customer> list = customerDao.findAll(spec);
for (Customer customer : list) {
System.out.println(customer);
}
Sort sort = new Sort(Sort.Direction.DESC,"custLevel" );
List<Customer> list1 = customerDao.findAll(spec, sort);
for (Customer customer : list1) {
System.out.println(customer);
}
}
@Test
public void testSpec5(){
Specification<Customer> spec = null;
PageRequest pageRequest = new PageRequest(2, 5);
Page<Customer> pages = customerDao.findAll(spec, pageRequest);
System.out.println(pages.getTotalElements());
System.out.println(pages.getTotalPages());
System.out.println(pages.getNumber());
System.out.println(pages.getNumberOfElements());
System.out.println(pages.getSize());
List<Customer> list = pages.getContent();
for (Customer customer : list) {
System.out.println(customer);
}
}
}
Customer.java
package org.example.entity;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "cst_customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cust_id")
private Long custId;
@Column(name = "cust_name")
private String custName;
@Column(name = "cust_source")
private String custSource;
@Column(name = "cust_level")
private String custLevel;
@Column(name = "cust_industry")
private String custIndustry;
@Column(name = "cust_phone")
private String custPhone;
@Column(name = "cust_address")
private String custAddress;
@OneToMany(mappedBy = "customer",cascade = CascadeType.ALL)
private Set<LinkMan> linkMans = new HashSet<>();
public Long getCustId() {
return custId;
}
public void setCustId(Long custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getCustSource() {
return custSource;
}
public void setCustSource(String custSource) {
this.custSource = custSource;
}
public String getCustLevel() {
return custLevel;
}
public void setCustLevel(String custLevel) {
this.custLevel = custLevel;
}
public String getCustIndustry() {
return custIndustry;
}
public void setCustIndustry(String custIndustry) {
this.custIndustry = custIndustry;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getCustAddress() {
return custAddress;
}
public void setCustAddress(String custAddress) {
this.custAddress = custAddress;
}
public Set<LinkMan> getLinkMans() {
return linkMans;
}
public void setLinkMans(Set<LinkMan> linkMans) {
this.linkMans = linkMans;
}
@Override
public String toString() {
return "Customer{" +
"custId=" + custId +
", custName='" + custName + '\'' +
", custSource='" + custSource + '\'' +
", custLevel='" + custLevel + '\'' +
", custIndustry='" + custIndustry + '\'' +
", custPhone='" + custPhone + '\'' +
", custAddress='" + custAddress + '\'' +
", linkMans=" + linkMans +
'}';
}
}
LinkMan.java
package org.example.entity;
import javax.persistence.*;
@Entity
@Table(name = "cst_linkman")
public class LinkMan {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "lkm_id")
private Long lkmId;
@Column(name = "lkm_name")
private String lkmName;
@Column(name = "lkm_gender")
private String lkmGender;
@Column(name = "lkm_phone")
private String lkmPhone;
@Column(name = "lkm_mobile")
private String lkmMobile;
@Column(name = "lkm_email")
private String lkmEmail;
@Column(name = "lkm_position")
private String lkmPosition;
@Column(name = "lkm_memo")
private String lkmMemo;
@ManyToOne(targetEntity = Customer.class,fetch = FetchType.LAZY)
@JoinColumn(name = "lkm_cust_id",referencedColumnName = "cust_id")
private Customer customer;
public Long getLkmId() {
return lkmId;
}
public void setLkmId(Long lkmId) {
this.lkmId = lkmId;
}
public String getLkmName() {
return lkmName;
}
public void setLkmName(String lkmName) {
this.lkmName = lkmName;
}
public String getLkmGender() {
return lkmGender;
}
public void setLkmGender(String lkmGender) {
this.lkmGender = lkmGender;
}
public String getLkmPhone() {
return lkmPhone;
}
public void setLkmPhone(String lkmPhone) {
this.lkmPhone = lkmPhone;
}
public String getLkmMobile() {
return lkmMobile;
}
public void setLkmMobile(String lkmMobile) {
this.lkmMobile = lkmMobile;
}
public String getLkmEmail() {
return lkmEmail;
}
public void setLkmEmail(String lkmEmail) {
this.lkmEmail = lkmEmail;
}
public String getLkmPosition() {
return lkmPosition;
}
public void setLkmPosition(String lkmPosition) {
this.lkmPosition = lkmPosition;
}
public String getLkmMemo() {
return lkmMemo;
}
public void setLkmMemo(String lkmMemo) {
this.lkmMemo = lkmMemo;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
@Override
public String toString() {
return "LinkMan{" +
"lkmId=" + lkmId +
", lkmName='" + lkmName + '\'' +
", lkmGender='" + lkmGender + '\'' +
", lkmPhone='" + lkmPhone + '\'' +
", lkmMobile='" + lkmMobile + '\'' +
", lkmEmail='" + lkmEmail + '\'' +
", lkmPosition='" + lkmPosition + '\'' +
", lkmMemo='" + lkmMemo + '\'' +
'}';
}
}
LinkManDao.java
package org.example.dao;
import org.example.entity.LinkMan;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface LinkManDao extends JpaRepository<LinkMan,Long>, JpaSpecificationExecutor<LinkMan> {
}
OneToManyTest.java
package org.example.test;
import org.example.dao.CustomerDao;
import org.example.dao.LinkManDao;
import org.example.entity.Customer;
import org.example.entity.LinkMan;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class OneToManyTest {
@Autowired
private CustomerDao customerDao;
@Autowired
private LinkManDao linkManDao;
@Test
@Transactional
@Rollback(value = false)
public void test1(){
Customer customer = new Customer();
customer.setCustLevel("白酒行业");
customer.setCustName("小糊涂");
LinkMan linkMan = new LinkMan();
linkMan.setLkmName("小王");
linkMan.setLkmGender("女");
customer.getLinkMans().add(linkMan);
customerDao.save(customer);
linkManDao.save(linkMan);
}
@Test
@Transactional
@Rollback(value = false)
public void test2(){
Customer customer = new Customer();
customer.setCustLevel("白酒行业");
customer.setCustName("小糊涂");
LinkMan linkMan = new LinkMan();
linkMan.setLkmName("小王");
linkMan.setLkmGender("女");
linkMan.setCustomer(customer);
customerDao.save(customer);
linkManDao.save(linkMan);
}
@Test
@Transactional
@Rollback(value = false)
public void test3(){
Customer customer = new Customer();
customer.setCustLevel("白酒行业");
customer.setCustName("小糊涂");
LinkMan linkMan = new LinkMan();
linkMan.setLkmName("小王");
linkMan.setLkmGender("女");
customer.getLinkMans().add(linkMan);
linkMan.setCustomer(customer);
customerDao.save(customer);
linkManDao.save(linkMan);
}
@Test
@Transactional
@Rollback(value = false)
public void test4(){
Customer customer = new Customer();
customer.setCustLevel("白酒行业");
customer.setCustName("小糊涂");
LinkMan linkMan = new LinkMan();
linkMan.setLkmName("小王");
linkMan.setLkmGender("女");
LinkMan man2 = new LinkMan();
man2.setLkmName("小yang");
man2.setLkmGender("男");
linkMan.setCustomer(customer);
man2.setCustomer(customer);
customer.getLinkMans().add(linkMan);
customer.getLinkMans().add(man2);
customerDao.save(customer);
}
@Test
@Transactional
@Rollback(value = false)
public void testDelete(){
Customer customer = customerDao.findOne(1L);
customerDao.delete(customer);
}
}
User.java
package org.example.entity;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "sys_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "user_name")
private String userName;
@Column(name = "user_age")
private Integer userAge;
@ManyToMany(targetEntity = Role.class,cascade = CascadeType.ALL)
@JoinTable(name = "sys_user_role",
joinColumns = { @JoinColumn(name = "sys_user_id",referencedColumnName = "user_id")},
inverseJoinColumns = {@JoinColumn(name = "sys_role_id",referencedColumnName = "role_id")}
)
private Set<Role> roleSet = new HashSet<>();
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userAge=" + userAge +
", roleSet=" + roleSet +
'}';
}
public Set<Role> getRoleSet() {
return roleSet;
}
public void setRoleSet(Set<Role> roleSet) {
this.roleSet = roleSet;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
Role.java
package org.example.entity;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "sys_role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id")
private Long roleId;
@Column(name = "role_name")
private String roleName;
@ManyToMany(mappedBy = "roleSet")
private Set<User> userSet = new HashSet<>();
@Override
public String toString() {
return "Role{" +
"roleId=" + roleId +
", roleName='" + roleName + '\'' +
", userSet=" + userSet +
'}';
}
public Set<User> getUserSet() {
return userSet;
}
public void setUserSet(Set<User> userSet) {
this.userSet = userSet;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
UserDao.java
package org.example.dao;
import org.example.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface UserDao extends JpaRepository<User,Long> , JpaSpecificationExecutor<User> {
}
RoleDao.java
package org.example.dao;
import org.example.entity.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface RoleDao extends JpaRepository<Role,Long>, JpaSpecificationExecutor<Role> {
}
ManyToManyTest.java
package org.example.test;
import org.example.dao.RoleDao;
import org.example.dao.UserDao;
import org.example.entity.Role;
import org.example.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class ManyToManyTest {
@Autowired
private UserDao userDao;
@Autowired
private RoleDao roleDao;
@Test
@Transactional
@Rollback(false)
public void testAdd(){
User user = new User();
user.setUserName("小王");
Role role = new Role();
role.setRoleName("普通用户");
user.getRoleSet().add(role);
role.getUserSet().add(user);
userDao.save(user);
roleDao.save(role);
}
@Test
@Transactional
@Rollback(false)
public void testCascade(){
User user = new User();
user.setUserName("小王");
Role role = new Role();
role.setRoleName("普通用户");
user.getRoleSet().add(role);
role.getUserSet().add(user);
userDao.save(user);
}
@Test
@Transactional
@Rollback(false)
public void testRemove(){
User user = userDao.findOne(1L);
userDao.delete(user);
}
}
ObjectQueryTest.java
package org.example.test;
import org.example.dao.CustomerDao;
import org.example.dao.LinkManDao;
import org.example.entity.Customer;
import org.example.entity.LinkMan;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import java.util.Iterator;
import java.util.Set;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class ObjectQueryTest {
@Autowired
private CustomerDao customerDao;
@Autowired
private LinkManDao linkManDao;
@Test
@Transactional
public void testQuery1(){
Customer one = customerDao.getOne(1L);
Set<LinkMan> linkMans = one.getLinkMans();
Iterator<LinkMan> iterator = linkMans.iterator();
while (iterator.hasNext()){
LinkMan next = iterator.next();
System.out.println(next);
}
}
@Test
@Transactional
public void testQuery2(){
Customer one = customerDao.findOne(1L);
Set<LinkMan> linkMans = one.getLinkMans();
Iterator<LinkMan> iterator = linkMans.iterator();
while (iterator.hasNext()){
LinkMan next = iterator.next();
System.out.println(next);
}
}
@Test
@Transactional
public void testQuery3() {
LinkMan one = linkManDao.findOne(2L);
Customer customer = one.getCustomer();
System.out.println(customer);
}
}
总结
以上就是今天学习的内容,喜欢的朋友们可以点赞,收藏,关注哦!感谢