SpringBoot integrates MyBatis to realize account CRUD

Article directory

    • 1. application.yaml configuration
    • 2. Unified return class
    • 3. UserController.java
    • 4. UserService.java
    • 5. UserServiceImpl.java
    • 6. UserMapper.java
    • 7. UserMapper.xml

1. application.yaml configuration

#Server port
server:
  port: 8080

#Data source configuration
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/welcome?useSSL=false &useUnicode=true &characterEncoding=utf-8 &zeroDateTimeBehavior=convertToNull &transformedBitIsBoolean=true &tinyInt1isBit= false & amp; allowMultiQueries=true & amp; serverTimezone=GMT+8 & amp; allowPublicKeyRetrieval=true
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
#mybatisconfiguration
mybatis:
  mapper-locations: classpath*:com/**/mapper/*Mapper.xml

2. Unified return class

Result.java:

import lombok.Data;
import java.io.Serializable;

@Data
public class Result<T> implements Serializable {

    /**
     * Whether to return success
     */
    private boolean success;

    /**
     * error state
     */
    private int code;

    /***
     * error message
     */
    private String msg;

    /**
     * return data
     */
    private T data;

    /**
     * timestamp
     */
    private long timestamp ;


    public Result (){
        this.timestamp = System.currentTimeMillis();
    }
    /**
     * successful operation
     */
    public static <T> Result<T> success() {
        return success(null);
    }

    /**
     * Successful operation, carrying data
     */
    public static <T> Result<T> success(T data){
        return success(ResultCode. RC100. getMessage(), data);
    }

    /**
     * Successful operation, carry message
     */
    public static <T> Result<T> success(String message) {
        return success(message, null);
    }

        /**
         * Successful operation, carry message and carry data
         */
    public static <T> Result<T> success(String message, T data) {
        return success(ResultCode. RC100. getCode(), message, data);
    }

    /**
     * Successful operation, with custom status code and message
     */
    public static <T> Result<T> success(int code, String message) {
        return success(code, message, null);
    }

    public static <T> Result<T> success(int code, String message, T data) {
        Result<T> result = new Result<T>();
        result. setCode(code);
        result. setMsg(message);
        result. setSuccess(true);
        result. setData(data);
        return result;
    }

    /**
     * failed operation, default data
     */
    public static <T> Result<T> failure() {
        return failure(ResultCode. RC100. getMessage());
    }

    /**
     * Failed operation, with custom message
     */
    public static <T> Result<T> failure(String message) {
        return failure(message, null);
    }

    /**
     * Fail operation, with custom message and data
     */
    public static <T> Result<T> failure(String message, T data) {
        return failure(ResultCode. RC999. getCode(), message, data);
    }

    /**
     * Failed operation, with custom status code and custom message
     */
    public static <T> Result<T> failure(int code, String message) {
        return failure(ResultCode. RC999. getCode(), message, null);
    }

    /**
     * Failed operation, carrying custom status code, message and data
     */
    public static <T> Result<T> failure(int code, String message, T data) {
        Result<T> result = new Result<T>();
        result. setCode(code);
        result. setMsg(message);
        result. setSuccess(false);
        result. setData(data);
        return result;
    }

    /**
     * Boolean return operation, with default return value
     */
    public static <T> Result<T> decide(boolean b) {
        return decide(b, ResultCode. RC100. getMessage(), ResultCode. RC999. getMessage());
    }

    /**
     * Boolean return operation, with custom message
     */
    public static <T> Result<T> decide(boolean b, String success, String failure) {
        if (b) {
            return success(success);
        } else {
            return failure(failure);
        }
    }
}

ResultCode.java:

import lombok. Getter;

public enum ResultCode {
    /**Successful operation**/
    RC100(100,"The operation was successful"),
    /**operation failed**/
    RC999(999,"Operation failed"),
    /**Service current limit**/
    RC200(200,"The service has enabled current limiting protection, please try again later!"),
    /**Service downgrade**/
    RC201(201,"The service has degraded protection enabled, please try again later!"),
    /**Hotspot parameter current limit**/
    RC202(202, "Hotspot parameter current limit, please try again later!"),
    /** System rules are not satisfied **/
    RC203(203,"The system rules do not meet the requirements, please try again later!"),
    /**Authorization rules fail**/
    RC204(204, "Authorization rule failed, please try again later!"),
    /**access_denied**/
    RC403(403,"No access permission, please contact the administrator to grant permission"),
    /**access_denied**/
    RC401(401,"An exception occurred when an anonymous user accesses a resource without permission"),
    /**Service exception**/
    RC500(500,"The system is abnormal, please try again later"),

    INVALID_TOKEN(2001,"The access token is invalid"),
    ACCESS_DENIED(2003,"No permission to access this resource"),
    CLIENT_AUTHENTICATION_FAILED(1001,"Client authentication failed"),
    USERNAME_OR_PASSWORD_ERROR(1002,"The username or password is incorrect"),
    UNSUPPORTED_GRANT_TYPE(1003, "Unsupported authentication mode");

    /**Custom status code**/
    @Getter
    private final int code;

    /**
     * carry message
     */
    @Getter
    private final String message;
    /**
     * Construction method
     */
    ResultCode(int code, String message) {

        this.code = code;

        this. message = message;
    }
}

3. UserController.java

@RequestMapping("/user")
@RestController
public class UserController {

    @Resource
    private UserService userService;

    /**
     * Log in
     * @param uName
     * @param uPwd
     * @return
     */
    @PostMapping("/login")
    public Result<String> login(String uName, String uPwd) {
        User u = userService.login(uName, uPwd);
        if (u != null) {
            return Result.success("login successful");
        }
        return Result.success("Login failed");
    }

    /**
     * Add user
     * @param user
     * @param uCode
     * @return
     */
    @PostMapping("/add")
    public Result<String> add(@RequestBody User user, @RequestBody Integer uCode) {
        if (UserServiceImpl. userCache. contains(uCode)) {
            return Result.failure("Please log in");
        }
        boolean b = userService. add(uCode, user);
        if (b) {
            return Result.success("Added successfully");
        } else {
            return Result.failure("Failed to add");
        }
    }

    /**
     * Query all
     * @return
     */
    @PostMapping("/list")
    public Result<List<User>> list(Integer uCode) {
        if (UserServiceImpl. userCache. contains(uCode)) {
            return Result.failure("Please log in");
        }
        List<User> list = userService. list();
        return Result. success(list);
    }

    /**
     * update user
     * @param user
     * @param uCode
     * @return
     */
    @PostMapping("/update")
    public Result<String> update(@RequestBody User user, @RequestBody Integer uCode) {
        if (UserServiceImpl. userCache. contains(uCode)) {
            return Result.failure("Please log in");
        }
        boolean b = userService. updateUser(user, uCode);
        if (b) {
            return Result.success("updated successfully");
        } else {
            return Result.failure("Update failed");
        }
    }

    /**
     * delete users
     * @param id
     * @param uCode
     * @return
     */
    @GetMapping("/delete")
    public Result<String> delete(Integer id, Integer uCode) {
        if (UserServiceImpl. userCache. contains(uCode)) {
            return Result.failure("Please log in");
        }
        boolean b = userService. delete(id, uCode);
        if (b) {
            return Result.success("delete successfully");
        } else {
            return Result.failure("Delete failed");
        }
    }
}

4. UserService.java

public interface UserService {
    /**
     * Add user
     *
     * @param uCode
     * @param user
     * @return
     */
    boolean add(Integer uCode, User user);


    /**
     * Log in
     * @return
     */
    User login(String uName, String uPwd);

    /**
     * update user
     * @param user
     * @param uCode
     * @return
     */
    boolean updateUser(User user, Integer uCode);

    /**
     * delete users
     * @param id
     * @param uCode
     * @return
     */
    boolean delete(Integer id, Integer uCode);

    /**
     * Query all
     * @return
     */
    List<User> list();
}

5. UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService{

    @Resource
    private UserMapper userMapper;

    // Simulate cache - check if the user is logged in
    public static List<Integer> userCache = new ArrayList<>();

    /**
     * Log in
     * @return
     */
    @Override
    public User login(String uName, String uPwd) {
        User login = userMapper.login(uName, uPwd);
        if (login != null) {
            userCache.add(login.getUCode());
        }
        return login;
    }

    /**
     * Add user
     *
     * @param uCode
     * @param user
     * @return
     */
    @Override
    public boolean add(Integer uCode, User user) {
        User operatorUser = userMapper.getUserByUCode(uCode);
        if (operatorUser. getUType() == 1) {
            return userMapper. add(user);
        }
        return false;
    }

    @Override
    public List<User> list() {
        return userMapper. list();
    }

    /**
     * update user
     *
     * @param user
     * @param uCode
     * @return
     */
    @Override
    public boolean updateUser(User user, Integer uCode) {
        User operatorUser = userMapper.getUserByUCode(uCode);
        if (operatorUser. getUType() == 1) {
            return userMapper. updateUser(user);
        } else {
            if (user. getUCode() == uCode) {
                return userMapper. updateUser(user);
            } else {
                return false;
            }
        }
    }

    /**
     * delete users
     *
     * @param id
     * @param uCode
     * @return
     */
    @Override
    public boolean delete(Integer id, Integer uCode) {
        User operatorUser = userMapper.getUserByUCode(uCode);
        if (operatorUser.getUType() == 1 & amp; & amp; id != uCode) {
            return userMapper.deleteById(id);
        }
        return false;
    }
}

6. UserMapper.java

@Mapper
public interface UserMapper {

    User login(String uName, String uPwd);

    boolean add(User user);

    List<User> list();

    User getUserByUCode(Integer uCode);

    boolean updateUser(User user);

    boolean deleteById(Integer id);
}

7. UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.welcome.mapper.UserMapper">

    <select id="login" resultType="com. welcome. entity. User">
        SELECT * FROM user WHERE uName = #{uName} AND uPwd = #{uPwd}
    </select>

    <insert id="add">
        INSERT INTO
        user(uCode,uName,uPwd,uType,uMemo)
        VALUES (#{uCode}, #{uName}, #{uPwd}, #{uType}, #{uMemo})
    </insert>

    <update id="updateUser">
        UPDATE
        user
        SET
        uName=#{uName}, uPwd=#{uPwd}, uType=#{uType}, uMemo=#{uMemo}
        WHERE
        uCode=#{uCode}
    </update>

    <delete id="deleteById">
        DELETE FROM user WHERE uCode = #{ids}
    </delete>

    <select id="getUserByUCode" resultType="com. welcome. entity. User">
        SELECT * FROM user WHERE uCode = #{uCode}
    </select>

    <select id="list" resultType="com. welcome. entity. User">
        SELECT * FROM user
    </select>
</mapper>