实体类
@Entity
@Table(name = "tb_user")
public class User {
/**
* @Id 声明该属性为主键列
* @GeneratedValue 配置主键的生成策略
* GenerationType.IDENTITY:自增
*
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "user_name")
private String userName;
@Column(name = "user_source")
private String userSource;
@Column(name = "user_level")
private String userLevel;
/**
* 行业
*/
@Column(name = "user_industry")
private String userIndustry;
@Column(name = "user_phone")
private String userPhone;
@Column(name = "user_address")
private String userAddress;
@Column(name = "create_time")
@ManyToOne(targetEntity = Dept.class)
@JoinColumn(name = "dept_id", referencedColumnName = "id")
private Dept dept;
/**
* 多对多对应关系
*
* fetch = FetchType.EAGER:立刻加载角色信息。
* jpa加载层级数据时,默认使用懒加载,即FetchType.LAZY
* 所以在加载完user对象时,会关闭数据链接session,并不能取到roleList数据
*/
@ManyToMany(mappedBy = "userList", fetch = FetchType.EAGER)
private List<Role> roleList = new ArrayList<>();
getter and setter..............
}
@Entity
@Table(name = "tb_dept")
public class Dept {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "dept_name")
private String deptName;
@OneToMany(targetEntity = User.class, fetch = FetchType.EAGER)
@JoinColumn(name = "dept_id", referencedColumnName = "id")
private List<User> userList;
getter and setter..............
}
@Entity
@Table(name = "tb_role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id")
private Integer roleId;
@Column(name = "role_name")
private String roleName;
/**
* cascade = CascadeType.PERSIST 级联操作权限
* PERSIST:保存权限
*
*/
@ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
@JoinTable(name = "tb_user_role", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
private List<User> userList = new ArrayList<>();
getter and setter..............
}
dao
public interface DeptRepository extends JpaRepository<Dept, Integer>,
JpaSpecificationExecutor<Dept> {
}
public interface UserRepository extends JpaRepository<User, Long>,
JpaSpecificationExecutor<User> {
}
动态查询
@Test
public void testSpe(){
User user = new User();
user.setUserName("");
user.setUserLevel("1");
int pageNum = 1;
int pageSize = 2;
Specification<User> specification = (root, query, builder) -> {
/**
* root: 获取属性
* builder: 构造查询
*
*/
Path<String> userNamePath = root.get("userName");
Path<String> levelPath = root.get("userLevel");
// 构造查询条件
List<Predicate> predicates = new ArrayList<Predicate>();
if (StringUtils.isNotBlank(user.getUserName())){
predicates.add(builder.equal(userNamePath, user.getUserName()));
//builder.like(userNamePath, user.getUserName()); // 模糊查询
}
if (StringUtils.isNotBlank(user.getUserLevel())){
predicates.add(builder.equal(levelPath, user.getUserLevel()));
}
// 以与的形式拼接多个查询条件
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
// 以或的形式拼接多个查询条件
// return builder.or(predicates.toArray(new Predicate[predicates.size()]));
};
// 分页 + 排序
PageRequest pageRequest = PageRequest.of(pageNum - 1, pageSize, Sort.by(Sort.Order.desc("createTime")));
Page<User> all = userRepository.findAll(specification, pageRequest);
// 查询的列表内容
List<User> content = all.getContent();
System.out.println("------------列表----------------");
for (User u : content) {
System.out.println(u);
}
System.out.println("------------总条数----------------");
// 总条数
int total = all.getNumberOfElements();
System.out.println(total);
System.out.println("------------当前页数----------------");
// 总页数
int totalPages = all.getTotalPages();
System.out.println(totalPages);
}
保存操作
@Test
@Transactional
@Rollback(false)
public void testManySearch(){
User user = new User();
// user.setUserId(5L);
user.setUserAddress("河北");
user.setUserIndustry("hr");
user.setUserLevel("1");
user.setUserName("乘辰");
user.setUserPhone("123123");
user.setUserSource("boss");
user.setCreateTime(getDateStr());
Dept dept = new Dept();
dept.setDeptName("人事部");
// dept.getUserList().add(user);//使用list添加需要初始化集合,会报空指针
user.setDept(dept);
// user.setDept(dept);
User saveUser = userRepository.save(user);
System.out.println("saveUser" + saveUser);
Dept saveDept = deptRepository.save(dept);
System.out.println("saveDept: " + saveDept);
}