1. 程式人生 > 實用技巧 >SpringBoot+Mybatsi 實現資料查詢、插入、刪除(前端與後臺資料均實現)

SpringBoot+Mybatsi 實現資料查詢、插入、刪除(前端與後臺資料均實現)

環境:

idea 2019

版本 2.4.0

資料庫:dbeaver、mysql

前端實現:postman

一、首先配置一下基本環境。

1. 新建專案,引入相關依賴:

<dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency
> <!-- mybatis配置--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!--jdbc--> <
dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <!--mysql jdbc驅動--> <dependency> <groupId>mysql</groupId> <
artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--web驅動--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--test驅動--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--valid註解依賴--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>
<!--charset引入-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-io</groupId>
                    <artifactId>commons-io</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2</version>
        </dependency>

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-collections</groupId>
                    <artifactId>commons-collections</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.6</version>
        </dependency>

2. Mybatis配置:

@Configuration
public class MyBatisConfig {

    /**
     * Mapper掃描配置. 自動掃描將Mapper介面生成代理注入到Spring.
     */
    @Bean
    public static MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        // 注意這裡的掃描路徑: 1.不要掃描到自定義的Mapper; 2.定義的路徑不要掃描到tk.mybatis.mapper(如定義**.mapper).
        // 兩個做法都會導致掃描到tk.mybatis的Mapper,就會產生重複定義的報錯.
        mapperScannerConfigurer.setBasePackage("*.example.**.mapper");
        return mapperScannerConfigurer;
    }

}

3. application.properties中資料來源配置、mapper包對映設定:

#資料來源配置
spring.datasource.url=jdbc:mysql://47.100.59.91:3306/testdemo
spring.datasource.username=root
spring.datasource.password= Aa12345&_

#mybatis對映配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=testdemo.system.dto
mybatis.configuration.map-underscore-to-camel-case=true

4. 專案結構如下:

5. 前端程式碼承接部分要實現兩個類,分別是Result和Results類。

package testdemo.util;

import testdemo.base.Result;

/**
 * Result生成工具類
 */
public class Results {

    protected Results() {}

    public static Result newResult() {
        return new Result();

    }

    public static Result newResult(boolean success) {
        return new Result(success);
    }

    //
    // 業務呼叫成功
    // ----------------------------------------------------------------------------------------------------
    public static Result success() {
        return new Result();
    }

    public static Result success(String msg) {
        return new Result(true, null, msg);
    }

    public static Result success(String code, String msg) {
        return new Result(true, code, msg);
    }

    public static Result successWithStatus(Integer status) {
        return new Result(true, status);
    }

    public static Result successWithStatus(Integer status, String msg) {
        return new Result(true, status, null, msg);
    }

    public static Result successWithData(Object data) {
        return new Result(true, null, null, data);
    }

    public static Result successWithData(Object data, String msg) {
        return new Result(true, null, msg, data);
    }

    public static Result successWithData(Object data, String code, String msg) {
        return new Result(true, code, msg, data);
    }

    //
    // 業務呼叫失敗
    // ----------------------------------------------------------------------------------------------------
    public static Result failure() {
        return new Result(false);
    }

    public static Result failure(String msg) {
        return new Result(false, null, msg);
    }

    public static Result failure(String code, String msg) {
        return new Result(false, code, msg);
    }

    public static Result failureWithStatus(Integer status) {
        return new Result(false, status);
    }

    public static Result failureWithStatus(Integer status, String msg) {
        return new Result(false, status, null, msg);
    }

    public static Result failureWithData(Object data) {
        return new Result(false, null, null, data);
    }

    public static Result failureWithData(Object data, String msg) {
        return new Result(false, null, msg, data);
    }

    public static Result failureWithData(Object data, String code, String msg) {
        return new Result(false, code, msg, data);
    }

}
package testdemo.base;

import com.fasterxml.jackson.annotation.JsonInclude;

import java.io.Serializable;

/**
 * 前端返回物件
 */
public class Result implements Serializable {
    private static final long serialVersionUID = 1430633339880116031L;

    /**
     * 成功與否標誌
     */
    private boolean success = true;
    /**
     * 返回狀態碼,為空則預設200.前端需要攔截一些常見的狀態碼如403、404、500等
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Integer status;
    /**
     * 編碼,可用於前端處理多語言,不需要則不用返回編碼
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String code;
    /**
     * 相關訊息
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String msg;
    /**
     * 相關資料
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Object data;


    public Result() {}

    public Result(boolean success) {
        this.success = success;
    }

    public Result(boolean success, Integer status) {
        this.success = success;
        this.status = status;
    }

    public Result(boolean success, String code, String msg){
        this(success);
        this.code = code;
        this.msg = msg;
    }

    public Result(boolean success, Integer status, String code, String msg) {
        this.success = success;
        this.status = status;
        this.code = code;
        this.msg = msg;
    }

    public Result(boolean success, String code, String msg, Object data){
        this(success);
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

6. 實現列舉類BaseEnum和BaseEnums。

package testdemo.constants;


import testdemo.base.BaseEnum;

import java.util.HashMap;
import java.util.Map;

/**
 * 基礎列舉值
 */
public enum BaseEnums implements BaseEnum<String, String> {

    SUCCESS("request.success", "請求成功"),

    FAILURE("request.failure", "請求失敗"),

    OPERATION_SUCCESS("operation.success", "操作成功"),

    OPERATION_FAILURE("operation.failure", "操作失敗"),

    ERROR("system.error", "系統異常"),

    NOT_FOUND("not_found", "請求資源不存在"),

    FORBIDDEN("forbidden", "無許可權訪問"),

    VERSION_NOT_MATCH("record_not_exists_or_version_not_match", "記錄版本不存在或不匹配"),

    PARAMETER_NOT_NULL("parameter_not_be_null", "引數不能為空");

    private String code;

    private String desc;

    private static Map<String, String> allMap = new HashMap<>();

    BaseEnums(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    static {
        for(BaseEnums enums : BaseEnums.values()){
            allMap.put(enums.code, enums.desc);
        }
    }

    @Override
    public String code() {
        return code;
    }

    @Override
    public String desc() {
        return desc;
    }

    public String desc(String code) {
        return allMap.get(code);
    }

}
package testdemo.base;

/**
 * 基礎列舉介面
 */
public interface BaseEnum<K, V> {

    /**
     * 獲取編碼
     *
     * @return 編碼
     */
    K code();

    /**
     * 獲取描述
     *
     * @return 描述
     */
    V desc();

}

7. 還有常量設定constants。

package testdemo.constants;

import com.google.common.base.Charsets;

import java.nio.charset.Charset;

/**
 * 系統級常量類
 */
public class Constants {

    public static final String APP_NAME = "spring";

    /**
     * 系統編碼
     */
    public static final Charset CHARSET = Charsets.UTF_8;

    /**
     * 標識:是/否、啟用/禁用等
     */
    public interface Flag {

        Integer YES = 1;

        Integer NO = 0;
    }

    /**
     * 操作型別
     */
    public interface Operation {
        /**
         * 新增
         */
        String ADD = "add";
        /**
         * 更新
         */
        String UPDATE = "update";
        /**
         * 刪除
         */
        String DELETE = "delete";
    }

    /**
     * 性別
     */
    public interface Sex {
        /**
         * 男
         */
        Integer MALE = 1;
        /**
         * 女
         */
        Integer FEMALE = 0;
    }

}

8. 接下來就是資料庫設計。

資料庫名字是testdemo,資料庫表名叫sys-user。

先建立一個數據庫,然後建立使用者表。

USE testdemo;
CREATE TABLE `testdemo`.`user` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `username` varchar(255) NULL,
    `passwprd` varchar(255) NULL,
    PRIMARY KEY (`id`)
);

插入幾條資料:

基本準備做好了,接下來就進入程式碼編寫了。

二、實現資料庫表資料單條查詢和多條查詢。

1. UserController.java中程式碼如下:

 @Autowired
    UserService userService ;

    /*
    * 查詢所有條資料
    * */
    @GetMapping("/select")
    public Result select(){
        List<User> userList = userService.select();
        return Results.successWithData(userList,
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());
    }

    /*
    * 查詢某條資料
    * */
    @GetMapping("/selectOne")
    public Result selectOne(@RequestParam("id") String id){

        return Results.successWithData(userService.selectOne(id),
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());
    }

2. UserService介面中宣告方法。

/*
     * 通過id查詢使用者
     * */
    public List<User> select();

    /*
    * 查詢某一條資料
    * */
    public User selectOne(String id);

3. UserServiceImp類繼承UserService,並完成資料傳遞。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper ;
    @Override
    public User selectOne(String id){
        return userMapper.selectOne(id) ;
    }

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

4. UserMapper中宣告方法,繼續傳遞資料。

@Repository
@Mapper
public interface UserMapper {

    public List<User> select();

    public User selectOne(String id);

}

5. UserMapper.xml中程式碼如下:

<mapper namespace="testdemo.system.dao.UserMapper">

    <resultMap id="userMap" type="testdemo.system.dto.User">

        <result property="id" column="id"/>
        <result property="userName" column="username"/>
        <result property="password" column="password"/>

    </resultMap>

    <select id="select" resultMap="userMap">
        select * from sys_user
    </select>

    <select id="selectOne" resultMap="userMap">
        select * from sys_user where id = #{id}
    </select>
</mapper>

這樣一來,後端查詢程式碼就完成了,現在利用postman完成前端資料查詢。

6、前端資料查詢

(1). 查詢所有資料

(2). 查詢一條資料

三、插入一條或多條資料。

在上面程式碼基礎上新增程式碼。

1. UserController.java中:

/*
    * 插入一條資料
    * */
    @PostMapping("/InsertOne")
    public Result InsertOne(@RequestBody User user){
        return Results.successWithData(userService.insertOne(user),
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());
    }

    /*
    * 插入多條資料
    * */
    @PostMapping("/InsertMany")
    public Result InsertMany(@RequestBody List<User> userlist){
        return Results.successWithData(userService.insertMany(userlist),
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());
    }

2. UserService介面中新增方法:

/*
     * 新增一個使用者
     * */
    public Integer insertOne(User user);

    /*
     * 新增多個使用者
     * */
    public Integer insertMany(List<User> userList);

3.UserServiceImpl實現資料傳遞:

@Override
    public Integer insertOne(User user){
        return userMapper.insertOne(user);
    }

    @Override
    public Integer insertMany(List<User> userList){
        return userMapper.insertMany(userList) ;
    }

4. UserMapper.java中:

public Integer insertOne(User user);

public Integer insertMany(List<User> userList);

5.UserMapper.xml中:

<insert id="insertOne">
        insert into sys_user(id,username,password)
            values(#{id},#{userName},#{password})
    </insert>


    <insert id="insertMany">
        insert into sys_user(id,username,password)
            values
            <foreach collection="list" item="user" index="index" separator=",">
                (#{user.id} , #{user.userName},#{user.password})
    </foreach>
    </insert>

6. 前端實現:

(1)插入一條資料:

(2)插入多條資料(先把資料表中清空,不然會出現重複插入情況)

四、刪除某條資料

1. UserController.java中:

 /*
    * 刪除某條資料
    * */
    @PostMapping("/DeleteOne")
    public Result DeleteOne(@RequestParam("id") String id){

        return Results.successWithData(userService.deleteOne(id),
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());
    }

2. UserService.java中:

/*
     * 刪除某一條資料
     * */
    public Integer deleteOne(String id);

3.UserServiceImpl.java中:

@Override
    public Integer deleteOne(String id){
        return userMapper.deleteOne(id) ;
    }

4. UserMapper.java中:

 public Integer deleteOne(String id);

5.UserMapper.xml中:

<delete id="deleteOne">
       delete from sys_user where id = #{id}
    </delete>

6.前端實現:

以上就是springboot框架+mybatis中前後端完整的資料庫增刪改查實現。

至此,結束。