后端学习开发【4】——实现 user 的增删改查功能

354 阅读3分钟

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);
}

image.png

第二步: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;
    }
}

image.png

第三步: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("数据不存在");
        }
    }

}

image.png 到此,user 的接口开发就完成了,下面进行测试。

user 接口测试

运行启动类 FirstProjectApplication 启动项目。

image.png

成功启动就会出现端口号。接下来我们可以通过浏览器、PostMan或其他工具访问接口了,我自己用的是 ApiPost。测试结果如下:

1、分页查询所有用户信息

http://localhost:8110/user/list

image.png

2、根据 id 查询用户信息

http://localhost:8110/user/getById?id=1

image.png

3、新增用户信息

http://localhost:8110/user/save

image.png

数据库变化如下图:

image.png

4、删除(逻辑删除)用户信息

http://localhost:8110/user/del?id=4

image.png

数据库变化如下图:

image.png

5、批量删除用户信息(非逻辑删除)

先加几个用户,再进行批量删除。

http://localhost:8110/user/delByIds?id=5,6,7

image.png

没删之前数据库如下图:

image.png

删除以后数据库如下图:

image.png

总结

至此,user 的接口开发及测试已经完成,接下来我们需要搭建前端项目了,我主要采用 vue.js + elementUI。