1. 程式人生 > 實用技巧 >Spring boot + Mybatis + SQLite 搭建blog API

Spring boot + Mybatis + SQLite 搭建blog API

Spring boot + Mybatis + SQLite 搭建blog API

一、準備環境

二、建立一個SpringBoot專案

在此我就不再演示如何建立SpringBoot專案了,需要的請看【 碼出精彩人生】這位大佬的部落格

使用IDEA建立一個springboot專案

三、在pom.xml檔案中新增所需要的依賴jar

使用sqlite資料庫需要引入sqlite-jdbc.jar包

<!-- SQLite 驅動 -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.21.0.1</version>
</dependency>

pom.xml檔案依賴如下

<dependencies>
	<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.3</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- SQLite 驅動 -->
    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.21.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.22</version>
    </dependency>
</dependencies>

四、建立sqlite資料庫

1、在專案的根目錄下建立檔案 blog-db.sqlite (名字隨便起)

2、然後在IDEA右邊邊上有一個Database,點選建立SQLite資料庫

3、File-->>選擇第一步建立的 blog-db.sqlite ,然後點選Test Connection 測試是否連線成功

4、建立 d_user 表

(1) 控制檯建立表

拷貝下面建立表語句,執行即可建立表

create table d_users
(
    id        int
        constraint "d-users_pk"
            primary key,
    username  text not null,
    password  text not null,
    start     int default 1 not null,
    foundTime text
);
(2)手動建立

五、一切準備就緒開始寫業務。

1、新增配置檔案application.yaml

把建立專案生成的.properties配置檔案刪除,建立一個 application.yaml,配置檔案放在 resources 目錄下

server:
  port: 8989 # 埠號
spring:
  datasource:
    url: jdbc:sqlite:D:/Software/PycharmProjects/d-blog/blog-db.sqlite # 建立的sqlite資料庫所在路徑
    username: # 因為沒有使用者名稱和密碼,所以這兩個引數就沒有值
    password:
    driver-class-name: org.sqlite.JDBC # sqlite驅動

# mybatis配置
mybatis:
  mapper-locations: classpath:mybatis/mapper/*Mapper.xml # 配置mapper.xml檔案路徑
  type-aliases-package: com.desire.entity # 實體類包名

2、根據資料庫表建立實體類--UserEntity.java

package com.desire.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class UserEntity {
    private int id;
    private String userName;
    private String password;
    private int start;
    private String foundTime;
}

3、在resources/mybatis/mapper中建立--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.desire.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="com.desire.entity.UserEntity">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="userName" jdbcType="VARCHAR" property="userName" />
        <result column="password" jdbcType="VARCHAR" property="password" />
        <result column="start" jdbcType="INTEGER" property="start" />
        <result column="foundTime" jdbcType="VARCHAR" property="foundTime" />
    </resultMap>

    <select id="findUserById" resultType="com.desire.entity.UserEntity">
        select * from d_users where id = #{id}
    </select>
    <select id="findUserAll" resultMap="BaseResultMap" resultType="com.desire.entity.UserEntity">
        select * from d_users
    </select>
</mapper>

4、建立mapper介面--UserMapper.java

package com.desire.mapper;

import com.desire.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {
    UserEntity findUserById(int id);
    List<UserEntity> findUserAll();
}

5、建立service實現mapper介面--UserService.java

package com.desire.service;

import com.desire.entity.UserEntity;
import com.desire.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService implements UserMapper {
    @Autowired
    private UserMapper userMapper;

    @Override
    public UserEntity findUserById(int id){
        return userMapper.findUserById(id);
    }

    @Override
    public List<UserEntity> findUserAll() {
        return userMapper.findUserAll();
    }
}

6、建立Controller--UserController.java

package com.desire.controller;

import com.desire.common.Result;
import com.desire.common.ResultUtil;
import com.desire.entity.UserEntity;
import com.desire.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@ResponseBody
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("getUser/{id}")
    public Result<UserEntity> getUser(@PathVariable int id) {
        return ResultUtil.success(userService.findUserById(id));
    }

    @RequestMapping("getUsers")
    public Result<UserEntity> getUsers() {
        return ResultUtil.success(userService.findUserAll());
    }
}

7、規範化封裝統一返回資料格式

1)定義http請求返回的最外層物件,封裝返回資料的統一格式 --Result.java
package com.desire.common;

/**
 * http請求返回的最外層物件
 * @param <T>
 */
public class Result<T> {
    /**
     * 錯誤碼.
     */
    private Integer code;

    /**
     * 提示資訊.
     */
    private String msg;

    /**
     * 具體的內容.
     */
    private T data;

    public Integer getCode() {
        return code;
    }

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

    public String getMsg() {
        return msg;
    }

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

    public T getData() {
        return data;
    }

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

2) 為了統一管理返回資料結果code和message,新建一個列舉類ResultEnum.java
package com.desire.common;

public enum ResultEnum {
    UNKONW_ERROR(1001, "未知錯誤"),
    SUCCESS(200, "成功")
    ;

    private Integer code;

    private String msg;

    ResultEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}
3) 為了防止多次出現new Result()的程式碼造成冗餘,增加一個工具類ResultUtil.java
package com.desire.common;

/**
 * 為了避免上面出現的程式碼冗餘情況,應該增加工具類,封裝請求失敗和成功時候的方法,這裡可使用靜態方法
 */
public class ResultUtil {
    public static Result success(Object object) {
        Result result = new Result();
        result.setCode(ResultEnum.SUCCESS.getCode());
        result.setMsg(ResultEnum.SUCCESS.getMsg());
        result.setData(object);
        return result;
    }

    public static Result success() {
        return success(null);
    }

    public static Result error(Integer code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}

六、啟動專案,驗證寫的是否正確--成功

七、寫在最後

這個例子只實現了兩個介面

最近在寫一個部落格相關的專案,前端vue部分已經完成(感覺寫的很low),不過還有待繼續改進,我也在繼續學習vue,所用介面,用的是json server 做的服務。

有興趣的可以看下,提點意見,【personal_blog

這個SpringBoot專案就是我做的部落格的介面服務,後續要把前端中的json server換成真實的介面。持續更新中,寫的不好請給我提些建議。感謝看到最後。