SpringBoot整合Mybatis
今天我們來學(xué)習(xí)一個Springboot案例??!
那么什么是SpringBoot技術(shù)呢?
- Spring Boot是由Pivotal團隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。
- 該框架使用了特定的方式來進行配置,從而使開發(fā)人員不再需要定義樣板化的配置。
- Spring Boot致力于在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。
SpringBoot有哪些特點:
(1)可以創(chuàng)建獨立的Spring應(yīng)用程序,并且基于其Maven或Gradle插件,可以創(chuàng)建可執(zhí)行的JARs和WARs;
(2)內(nèi)嵌Tomcat或Jetty等Servlet容器;
(3)提供自動配置的“starter”項目對象模型(POMS)以簡化Maven配置;
(4)盡可能自動配置Spring容器;
(5)提供準備好的特性,如指標、健康檢查和外部化配置;
(6)絕對沒有代碼生成,不需要XML配置
SpringBoot的核心功能有哪些?
- 獨立運行:SpringBoot開發(fā)的應(yīng)用可以以JRA包的形式獨立運行,運行一個SpringBoot應(yīng)用只需通過 java –jar xxxx.jar 來運行。
- 內(nèi)嵌容器:SpringBoot內(nèi)嵌了多個WEB容器,如:Tomcat、Jetty、Undertow,所以可以使用非WAR包形式進行項目部署;
- 自動starter依賴:SpringBoot提供了一系列的starter來簡化Maven的依賴加載。starter是一組方便的依賴關(guān)系描述符,它將常用的依賴分組并將其合并到一個依賴中,這樣就可以一次性將相關(guān)依賴添加到Maven或Gradle中;
- 自動配置:SpringBoot會根據(jù)在類路徑中的JAR包和類,自動將類注入到SpringBoot的上下文中,極大地減少配置的使用;
- 應(yīng)用監(jiān)控:SpringBoot提供基于http、ssh、telnet的監(jiān)控方式,對運行時的項目提供生產(chǎn)級別的服務(wù)監(jiān)控和健康檢測;
- 無代碼生成/無需編寫XML配置:SpringBoot不是借助于代碼生成來實現(xiàn)的,而是通過條件注解來實現(xiàn)的,這是 Spring 4.x 提供的新特性。Spring4.x提倡使用Java配置和注解組合,無需編寫任何xml配置即可實現(xiàn)Spring的所有配置功能;
該案例主要使用到的技術(shù)有:Springboot、mybatis,外加一個測試工具 Postman 或者 ApiPost都是可以的!http請求測試工具。
話不多說,開始整活?。。∩洗a。
特點:Springboot與SSM之間是類似的,并且Springboot沒有減少代碼,而是Springboot通過注解的形式幫我們封裝了SSM的過程,簡化了編寫代碼的量!這里提供一個Springboot啟動類中,@SpringBootApplication的源碼分析鏈接!
文檔鏈接: https://zhuanlan.zhihu.com/p/301063931
話不多說,開始整活!??!寫代碼。
1.創(chuàng)建數(shù)據(jù)庫
首先,數(shù)據(jù)庫–>創(chuàng)建一個數(shù)據(jù)庫名稱: goods
-- 創(chuàng)建數(shù)據(jù)庫
create database goods ;
-- 進入 goods數(shù)據(jù)庫
use goods ;
創(chuàng)建表–>商品表:goods 和 類型表:type
CREATE TABLE `goods` ( -- 商品表
`id` int NOT NULL AUTO_INCREMENT,
`goodsName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL,
`goodsPrice` decimal(10, 2) NULL DEFAULT NULL,
`goodsNum` int NULL DEFAULT NULL,
`goodsType` int NULL DEFAULT NULL,
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
-- 添加數(shù)據(jù)
INSERT INTO `goods` VALUES (1, '華為手機', 2500.00, 8, 1, '手機質(zhì)量好');
INSERT INTO `goods` VALUES (2, '蘋果', 15.00, 5, 2, '品質(zhì)優(yōu),水分多而甜');
INSERT INTO `goods` VALUES (3, '蘋果手機', 18000.00, 1, 1, '價格貴');
INSERT INTO `goods` VALUES (4, '華碩電腦', 8000.00, 1, 3, '高配置,性能強');
INSERT INTO `goods` VALUES (5, '格力空調(diào)', 2500.00, 1, 4, '格力空調(diào),好品質(zhì),值得信賴');
CREATE TABLE `type` ( -- 類型表
`typeId` int NOT NULL AUTO_INCREMENT,
`typeName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL,
PRIMARY KEY (`typeId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
-- 添加數(shù)據(jù)
INSERT INTO `type` VALUES (1, '手機');
INSERT INTO `type` VALUES (2, '水果');
INSERT INTO `type` VALUES (3, '電腦');
INSERT INTO `type` VALUES (4, '電器');
2.idea創(chuàng)建項目
(1)進入創(chuàng)建項目查窗口
##### (2)選擇Springboot版本 和 所需要的依賴
##### (3)創(chuàng)建完成后導(dǎo)入 mybatis依賴
<!--Springboot整合mybatis依賴包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
3.創(chuàng)建三層架構(gòu) pojo、service和impl、mapper
##### (1)實體類pojo ==> Goods
@Data
public class Goods {
private long id;
private String goodsName;
private double goodsPrice;
private long goodsNum;
private String goodsType;
private String remark;
}
(2)接口mapper ==> GoodsMapper 接口
編寫mapper接口,并寫入Spring管理注解(交由IoC管理)
@Mapper
public interface GoodsMapper {
/**
* 查詢所有商品信息
* @return
*/
List<Goods> getGoodsList();
/**
* 添加商品信息
* @param goods
* @return
*/
int addGoods(Goods goods);
/**
* 根據(jù)id刪除商品信息
* @param id
* @return
*/
int deleteGoodsById(@Param("id") Integer id);
/**
* 根據(jù)id查詢商品信息
* @param id
* @return
*/
Goods findGoodsById(@Param("id") Integer id);
/**
* 根據(jù)id修改商品信息
* @param id
* @return
*/
int updateGoodsById(Goods goods);
}
(3)編寫mapper的映射文件 GoodsMapper.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接口 -->
<mapper namespace="com.ithjc.mapper.GoodsMapper">
<select id="getGoodsList" resultType="goods">
select *
from goods
</select>
<select id="findGoodsById" resultType="goods">
select * from goods where id = #{id}
</select>
<insert id="addGoods" parameterType="goods">
insert into goods (id,goodsName, goodsPrice, goodsNum, goodsType, remark)
values (null,#{goodsName}, #{goodsPrice}, #{goodsNum}, #{goodsType}, #{remark});
</insert>
<delete id="deleteGoodsById" parameterType="java.lang.Integer">
delete
from goods
where id = #{id};
</delete>
<update id="updateGoodsById" parameterType="goods">
update goods
<set>
<if test="goodsName != null and goodsName != ''">
goodsName = #{goodsName},
</if>
<if test="goodsPrice != null and goodsPrice != ''">
goodsPrice = #{goodsPrice},
</if>
<if test="goodsType != null and goodsType != ''">
goodsType = #{goodsType},
</if>
<if test="goodsNum != null and goodsNum != ''">
goodsType = #{goodsType},
</if>
<if test="remark != null and remark != ''">
remark = #{remark}
</if>
</set>
where id = #{id};
</update>
</mapper>
(4)service ==> GoodsService 和 實現(xiàn)接口 Impl ==>GoodsServiceImpl
首先是,GoodsService
public interface GoodsService {
List<Goods> getGoodsList();
int addGoods(Goods goods);
int deleteGoodsById(Integer id);
Goods findGoodsById(Integer id);
int updateGoodsById(Goods goods);
}
再實現(xiàn)接口,GoodsServiceImpl
寫入@Service
注解,交由Spring管理
@Service
public class GoodsServiceImpl implements GoodsService {
@Autowired
private GoodsMapper goodsMapper;
@Override
public List<Goods> getGoodsList() {
return goodsMapper.getGoodsList();
}
@Override
public int addGoods(Goods goods) {
return goodsMapper.addGoods(goods);
}
@Override
public int deleteGoodsById(Integer id) {
return goodsMapper.deleteGoodsById(id);
}
@Override
public Goods findGoodsById(Integer id) {
return goodsMapper.findGoodsById(id);
}
@Override
public int updateGoodsById(Goods goods) {
return goodsMapper.updateGoodsById(goods);
}
4.使用數(shù)據(jù)統(tǒng)一格式 工具類util
(1)統(tǒng)一返回的數(shù)據(jù)類型 和 狀態(tài)碼
封裝數(shù)據(jù)類:R
/**
* 統(tǒng)一返回數(shù)據(jù) json 格式 前后端 分離 json
**/
@Data
public class R {
//狀態(tài)值
private Boolean success;
//狀態(tài)嗎
private Integer code;
//數(shù)據(jù)
private String message;
private Map<String, Object> data = new HashMap<String, Object>();
private R(){}
public static R ok(){
R r = new R();
r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
r.setCode(ResultCodeEnum.SUCCESS.getCode());
r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
return r;
}
public static R error(){
R r = new R();
r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess());
r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode());
r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage());
return r;
}
public static R setResult(ResultCodeEnum resultCodeEnum){
R r = new R();
r.setSuccess(resultCodeEnum.getSuccess());
r.setCode(resultCodeEnum.getCode());
r.setMessage(resultCodeEnum.getMessage());
return r;
}
public R success(Boolean success){
this.setSuccess(success);
return this;
}
public R message(String message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
(2)ResultCodeEnum
類!
枚舉類 :ResultCodeEnum
@Getter
public enum ResultCodeEnum {
SUCCESS(true, 200,"成功"),
UNKNOWN_REASON(false, 20001, "未知錯誤"),
BAD_SQL_GRAMMAR(false, 21001, "sql語法錯誤"),
JSON_PARSE_ERROR(false, 21002, "json解析異常"),
PARAM_ERROR(false, 21003, "參數(shù)不正確"),
FILE_UPLOAD_ERROR(false, 21004, "文件上傳錯誤"),
EXCEL_DATA_IMPORT_ERROR(false, 21005, "Excel數(shù)據(jù)導(dǎo)入錯誤"),
USERLOGIN_INVALID_ERROR(false, 21007,"登錄信息過期,請重新登錄"),
USERUNLOGIN_ERROR(false, 21008,"用戶未登錄,請重新登錄");
private Boolean success;
private Integer code;
private String message;
private ResultCodeEnum(Boolean success, Integer code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
5.編寫Springboot的配置文件
Springboot的配置文件是在,resources 包下的 application.properties !
我們一般使用的是 .yml 或者 .yaml格式的配置手法??!
(1)所以首先,把application.properties 改為 application.yml
application.yml 配置文件編寫
# 設(shè)置端口
server:
port: 8080
# mybatis 的配置
mybatis:
type-aliases-package: com.ithjc.pojo
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:/mapper/*.xml
# spring 的配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/goods?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: root
6.編寫業(yè)務(wù)代碼 (crud)
(1)創(chuàng)建 controller 包 ==>類名:GoodsController
GoodsController
類
寫入@Controller
注解!
@Controller
public class GoodsController {
@Autowired
private GoodsService goodsService;
@RequestMapping("/getAll")
@ResponseBody
public R getAll(){
List<Goods> goodsList = goodsService.getGoodsList();
return R.ok().data("goodsList",goodsList);
}
@RequestMapping("/addGoods")
@ResponseBody
public R addGoods(Goods goods){
int i = goodsService.addGoods(goods);
return R.ok().data("addGoods",i);
}
@RequestMapping("/deleteGoods")
@ResponseBody
public R deleteGoodsById(@RequestParam("id")Integer id){
int i = goodsService.deleteGoodsById(id);
return R.ok().data("deleteGoods",i);
}
@RequestMapping("/getGoods")
@ResponseBody
public R getGoodsById(@RequestParam("id") Integer id){
Goods goods = goodsService.findGoodsById(id);
return R.ok().data("goods",goods);
}
@RequestMapping("/updateGoods")
@ResponseBody
public R updateGoodsById(Goods goods){
int i = goodsService.updateGoodsById(goods);
return R.ok().data("updateGoods",i);
}
7.使用Postman 或者ApiPost ==>API在線測試工具
我這里使用的ApiPost,國產(chǎn)的Http請求測試工具,使用教程如下:
(2)Http請求:
查詢選擇: GET 請求
localhost:8080/getAll
增加選擇:POST 請求
localhost:8080/addGoods
增加數(shù)據(jù)時,需要加入?yún)?shù):
刪除選擇:DELETE 請求 或者 POST 請求
localhost:8080/deleteGoods
刪除數(shù)據(jù)時,根據(jù)id刪除:
修改選擇:PUT 請求 或者 POST 請求
localhost:8080/updateGoods
修改數(shù)據(jù)時,根據(jù)id修改,和修改那些數(shù)據(jù)(我使用了mybatis的動態(tài)sql,所以修改指定數(shù)據(jù)即可,看您的需求)
文章來源:http://www.zghlxwxcb.cn/news/detail-816054.html
查詢選擇:GET 請求
localhost:8080/getGoods
文章來源地址http://www.zghlxwxcb.cn/news/detail-816054.html
到了這里,關(guān)于Springboot整合mybatis實現(xiàn)增刪改查(crud)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!