Spring boot + Mybatis + SQLite 搭建blog API
一、准備環境
二、創建一個SpringBoot項目
在此我就不再演示如何創建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 # 實體類包名
# mybatis 打印SQL, 配置后就會在控制台打印執行的SQL語句
logging:
level:
com.desire.dao: debug
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.dao.IUserDao">
<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、創建表數據庫訪問層接口--IUserDao.java
package com.desire.dao;
import com.desire.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* (D_Users)表數據庫訪問層
*/
@Mapper
public interface IUserDao {
UserEntity findUserById(int id);
List<UserEntity> findUserAll();
}
5、創建表服務接口--IUserService.java
package com.desire.service;
import com.desire.entity.UserEntity;
import java.util.List;
/**
* (D_Users)表服務接口
*/
public interface IUserService {
UserEntity findUserById(int id);
List<UserEntity> findUserAll();
}
6、創建表服務實現類--UserServiceImpl.java
package com.desire.service.impl;
import com.desire.dao.IUserDao;
import com.desire.entity.UserEntity;
import com.desire.service.IUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* (D_Users)表服務實現類
*/
@Service
public class UserServiceImpl implements IUserService {
@Resource
private IUserDao IUserDao;
@Override
public UserEntity findUserById(int id) {
return IUserDao.findUserById(id);
}
@Override
public List<UserEntity> findUserAll() {
return IUserDao.findUserAll();
}
}
7、創建表控制層Controller--UserController.java
package com.desire.controller;
import com.desire.common.DateUtil;
import com.desire.common.Result;
import com.desire.common.ResultUtil;
import com.desire.entity.UserEntity;
import com.desire.service.IUserService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import static com.desire.common.ResultEnum.*;
/**
* (D_Users)表控制層
*/
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 服務對象
*/
@Resource
private IUserService userService;
@RequestMapping("getUser/{id}")
public Result<Object> getUser(@PathVariable int id) {
UserEntity user = userService.findUserById(id);
if (user != null) {
user.setFoundTime(DateUtil.timeStamp2Date(user.getFoundTime(), null));
return ResultUtil.success(SUCCESS, user);
} else {
return ResultUtil.error(USER_NOT_FOND);
}
}
@RequestMapping("getUsers")
public Result<Object> getUsers() {
List<UserEntity> users = userService.findUserAll();
for (UserEntity user : users) {
user.setFoundTime(DateUtil.timeStamp2Date(user.getFoundTime(), null));
}
return ResultUtil.success(SUCCESS, users);
}
}
8、規范化封裝統一返回數據格式
1)定義http請求返回的最外層對象,封裝返回數據的統一格式 --Result.java
package com.desire.common;
import lombok.Getter;
import lombok.Setter;
/**
* http請求返回的最外層對象
* @param <T>
*/
@Getter
@Setter
public class Result<T> {
/**
* 錯誤碼.
*/
private Integer code;
/**
* 提示信息.
*/
private String msg;
/**
* 具體的內容.
*/
private T data;
}
2) 為了統一管理返回數據結果code和message,新建一個枚舉類ResultEnum.java
package com.desire.common;
import lombok.Getter;
@Getter
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;
}
}
3) 為了防止多次出現new Result()的代碼造成冗余,增加一個工具類ResultUtil.java
package com.desire.common;
/**
* 為了避免出現代碼冗余情況,應該增加工具類,封裝請求失敗和成功時候的方法,這里可使用靜態方法
*/
public class ResultUtil {
public static Result<Object> success(ResultEnum resultEnum, Object object) {
Result<Object> result = new Result<>();
result.setCode(resultEnum.getCode());
result.setMsg(resultEnum.getMsg());
result.setData(object);
return result;
}
public static Result<Object> error(ResultEnum resultEnum) {
Result<Object> result = new Result<>();
result.setCode(resultEnum.getCode());
result.setMsg(resultEnum.getMsg());
return result;
}
}
六、啟動項目,驗證寫的是否正確--成功
七、寫在最后
這個例子只實現了兩個接口
- 根據id查找用戶: http://localhost:8989/user/getUser/2
- 查詢全部用戶: http://localhost:8989/user/getUsers
最近在寫一個博客相關的項目,前端vue部分已經完成(感覺寫的很low),不過還有待繼續改進,我也在繼續學習vue,所用接口,用的是json server 做的服務。
有興趣的可以看下,提點意見,【personal_blog】
這個SpringBoot項目就是我做的博客的接口服務,后續要把前端中的json server換成真實的接口。持續更新中,寫的不好請給我提些建議。感謝看到最后。