Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
前言
在后端学习开发【1】【2】【3】中,我们新建了数据库和 user 表,初始化了 spring boot 项目,且后端与数据库的连接也都成功了,除此以外我们还封装了工具类代码,为的就是能够实现后端的增删改查接口功能。
user 的接口开发
以 user 为基础,我们需要实现 user 的增删改查功能。
entity 中的 user 代码如下:
package com.qq.first_project.entity;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author Qiu
* @since 2022-03-09
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 姓名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 禁用启用(逻辑删除)
*/
private String deleted;
}
第一步:UserService 接口代码编写
打开 service 目录下的 UserService,编写分页查询的代码,如下:
package com.qq.first_project.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qq.first_project.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author Qiu
* @since 2022-03-09
*/
public interface UserService extends IService<User> {
Page pageList(Page page, User user);
List<Map<String, Object>> selectNameListByKey(String key);
}
第二步:UserServiceImpl 实现类代码编写
打开 service/impl 目录下的 UserServiceImpl,编写实现分页查询的代码和模糊查询的代码,如下:
package com.qq.first_project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qq.first_project.entity.User;
import com.qq.first_project.mapper.UserMapper;
import com.qq.first_project.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author Qiu
* @since 2022-03-09
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public Page pageList(Page page, User user) {
if(page == null){
page = new Page();
}
QueryWrapper wrapper = new QueryWrapper();
if(user!=null && StringUtils.isNotEmpty(user.getUsername())){
//根据username字段模糊查找
wrapper.like("username",user.getUsername());
}
return super.page(page,wrapper);
}
@Override
public List<Map<String, Object>> selectNameListByKey(String key) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("username");
queryWrapper.likeRight("username", key);
List<Map<String, Object>> list = baseMapper.selectMaps(queryWrapper);//返回值是Map列表
return list;
}
}
第三步:UserController 前端控制接口代码编写
打开 controller 目录下的 UserController,实现 user 的增删改查接口,代码如下:
package com.qq.first_project.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qq.first_project.common.R;
import com.qq.first_project.entity.User;
import com.qq.first_project.service.UserService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* <p>
* 前端控制器
* </p>
*
* @author Qiu
* @since 2022-03-09
*/
@RestController
@CrossOrigin //跨域
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 分页查找所有
* @return
*/
@GetMapping("/list")
R list(ModelMap modelMap, Page page, @ModelAttribute("user") User user) {
page = userService.pageList(page, user);
modelMap.addAttribute("page", page);
return R.ok().data("data",page);
}
/**
* 根据id查
* @param id
* @return
*/
@GetMapping("/getById")
R getById(String id) {
User user = userService.getById(id);
if(user != null){
return R.ok().data("data", user);
}else{
return R.error().message("数据不存在");
}
}
/**
* 根据左关键字查询账号名
* @param key
* @return
*/
@GetMapping("getByNames")
public R selectNameListByKey(String key){
List<Map<String, Object>> nameList = userService.selectNameListByKey(key);
return R.ok().data("data", nameList);
}
/**
* 新增
* @param user
* @return
*/
@PostMapping("/save")
R save(User user){
boolean result = userService.save(user);
if (result) {
return R.ok().message("保存成功");
} else {
return R.error().message("保存失败");
}
}
/**
* 修改
* @param user
* @return
*/
@PostMapping("/update")
R updateById(User user){
boolean result = userService.updateById(user);
if(result){
return R.ok().message("修改成功");
}else{
return R.error().message("数据不存在");
}
}
/**
* 禁用
* @param id
* @return
*/
@PostMapping("/disable")
R disable(String id ) {
User user = userService.getById(id);
user.setDeleted("1");
boolean result = userService.updateById(user);
if(result){
return R.ok().message("禁用成功");
}else{
return R.error().message("数据不存在");
}
}
/**
* 启用
* @param id
* @return
*/
@PostMapping("/enable")
R enable(String id ) {
User user = userService.getById(id);
user.setDeleted("0");
boolean result = userService.updateById(user);
if(result){
return R.ok().message("启用成功");
}else{
return R.error().message("数据不存在");
}
}
/**
* 批量删除
* @param id
* @return
*/
@PostMapping("/delByIds")
R delByIds(String[] id) {
boolean result = userService.removeByIds(Arrays.asList(id));
if(result){
return R.ok().message("删除成功");
}else{
return R.error().message("数据不存在");
}
}
}
到此,user 的接口开发就完成了,下面进行测试。
user 接口测试
运行启动类 FirstProjectApplication 启动项目。
成功启动就会出现端口号。接下来我们可以通过浏览器、PostMan或其他工具访问接口了,我自己用的是 ApiPost。测试结果如下:
1、分页查询所有用户信息
http://localhost:8110/user/list
2、根据 id 查询用户信息
http://localhost:8110/user/getById?id=1
3、新增用户信息
http://localhost:8110/user/save
数据库变化如下图:
4、删除(逻辑删除)用户信息
http://localhost:8110/user/del?id=4
数据库变化如下图:
5、批量删除用户信息(非逻辑删除)
先加几个用户,再进行批量删除。
http://localhost:8110/user/delByIds?id=5,6,7
没删之前数据库如下图:
删除以后数据库如下图:
总结
至此,user 的接口开发及测试已经完成,接下来我们需要搭建前端项目了,我主要采用 vue.js + elementUI。