SpringBoot + JPA的自学之路(二)简单使用

12 篇文章 0 订阅
5 篇文章 0 订阅

上一节大概说了一下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的多表连接查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值