上一节大概说了一下JPA的基本配置、项目结构以及数据库的结构,这一节说一下JPA的简单使用
这节主要以用户管理作为例子,完成用户的添加和查询(包括分页查询)。
控制层UserController.java
package priv.cwr.controller;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import priv.cwr.model.UserModel;
import priv.cwr.service.UserService;
/**
* @Date: 18-12-19 17:36
* @Description: 用户Controller
*/
@RestController
@RequestMapping("/user")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
/**
* 新增用户
*
* @param userModel 用户实体
* @return
*/
@PostMapping("/add")
public UserModel addUser(@RequestBody UserModel userModel) {
return this.userService.save(userModel);
}
/**
* 通过用户id查询用户信息
*
* @param id 用户id
* @return
*/
@GetMapping("/find-id/{id}")
public UserModel findOneById(@PathVariable Long id) {
return this.userService.findOneById(id);
}
/**
* 分页查询用户列表
*
* @param page 当前页数
* @param pagesize 每页行数
* @return
*/
@GetMapping("/find-all")
public Page<UserModel> findAll(@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "pagesize", required = false) Integer pagesize) {
// 注意Pageable的分页是从0开始的
if (page == null) {
page = 0;
}
if (pagesize == null) {
pagesize = 10;
}
// Pageable除了可以分页外还可以进行排序
// 默认排序
Pageable pageable = PageRequest.of(page, pagesize);
// 按照用户id倒序排序
// Pageable pageable = PageRequest.of(page, pagesize, new Sort(Sort.Direction.DESC, "userId"));
// 按照创建时间倒序排序
// Pageable pageable = PageRequest.of(page,pagesize,new Sort(Sort.Direction.DESC, "createdTs"));
return this.userService.findAll(pageable);
}
}
业务层UserService.java
package priv.cwr.service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import priv.cwr.model.UserModel;
import priv.cwr.repository.UserRepo;
/**
* @Author: wenrui.chen
* @Date: 18-12-19 17:38
* @Description:
*/
@Service
public class UserService {
private final UserRepo userRepo;
public UserService(UserRepo userRepo) {
this.userRepo = userRepo;
}
/**
* 新增用户
*
* @param userModel 用户实体
* @return
*/
public UserModel save(UserModel userModel) {
return this.userRepo.save(userModel);
}
/**
* 通过用户id查询用户信息
*
* @param id 用户id
* @return
*/
public UserModel findOneById(Long id) {
// findById()是JPA自带的方法,返回的是一个Optional<UserModel>对象
// 这里的处理是如果不为空则返回里面的UserModel对象,如果为空则返回null
return this.userRepo.findById(id).orElse(null);
}
/**
* 分页查询用户列表
*
* @param pageable 分页参数
* @return
*/
public Page<UserModel> findAll(Pageable pageable) {
return this.userRepo.findAll(pageable);
}
}
数据层UserRepo.java
package priv.cwr.repository;
import org.springframework.stereotype.Repository;
import priv.cwr.model.UserModel;
@Repository
public interface UserRepo extends BaseRepo<UserModel> {
}
实体UserModel.java
package priv.cwr.model;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.*;
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "t_user")
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class UserModel extends BaseModel {
/**
* 用户id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
/**
* 用户姓名
*/
private String name;
/**
* 性别,1:男,2:女
*/
private Integer gender;
/**
* 用户电话
*/
private String phone;
/**
* 备注
*/
private String note;
/**
* 部门id
*/
@Column(name = "dept_id")
private Long deptId;
}
总结
以上的代码主要实现了三个功能:
1、添加用户:用户的主键user_id使用的是自增主键,save()方法也是JPA的CrudRepository接口中自带的方法;
2、查询单个用户:findById()方法也是CrudRepository接口中自带的方法,返回的是一个Optional<T>对象;
3、用户列表查询:findAll()方法是PagingAndSortingRepository接口自带的方法,参数是一个Pageable对象(JPA使用Pageable对象进行分页)。
这里只是JPA最简单最基础的使用方法,下一节会分享JPA的多表连接查询。