SpringBoot整合Mybatis
今天我们来学习一个Springboot案例!!
那么什么是SpringBoot技术呢?
- Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
- 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
- Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
SpringBoot有哪些特点:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置
SpringBoot的核心功能有哪些?
- 独立运行:SpringBoot开发的应用可以以JRA包的形式独立运行,运行一个SpringBoot应用只需通过 java –jar xxxx.jar 来运行。
- 内嵌容器:SpringBoot内嵌了多个WEB容器,如:Tomcat、Jetty、Undertow,所以可以使用非WAR包形式进行项目部署;
- 自动starter依赖:SpringBoot提供了一系列的starter来简化Maven的依赖加载。starter是一组方便的依赖关系描述符,它将常用的依赖分组并将其合并到一个依赖中,这样就可以一次性将相关依赖添加到Maven或Gradle中;
- 自动配置:SpringBoot会根据在类路径中的JAR包和类,自动将类注入到SpringBoot的上下文中,极大地减少配置的使用;
- 应用监控:SpringBoot提供基于http、ssh、telnet的监控方式,对运行时的项目提供生产级别的服务监控和健康检测;
- 无代码生成/无需编写XML配置:SpringBoot不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring4.x提倡使用Java配置和注解组合,无需编写任何xml配置即可实现Spring的所有配置功能;
该案例主要使用到的技术有:Springboot、mybatis,外加一个测试工具 Postman 或者 ApiPost都是可以的!http请求测试工具。
话不多说,开始整活!!!上代码。
特点:Springboot与SSM之间是类似的,并且Springboot没有减少代码,而是Springboot通过注解的形式帮我们封装了SSM的过程,简化了编写代码的量!
这里提供一个Springboot启动类中,@SpringBootApplication的源码分析链接!
文档链接: https://zhuanlan.zhihu.com/p/301063931
话不多说,开始整活!!!写代码。
1.创建数据库
首先,数据库–>创建一个数据库名称: goods
-- 创建数据库
create database goods ;
-- 进入 goods数据库
use goods ;
创建表–>商品表: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;
-- 添加数据
INSERT INTO `goods` VALUES (1, '华为手机', 2500.00, 8, 1, '手机质量好');
INSERT INTO `goods` VALUES (2, '苹果', 15.00, 5, 2, '品质优,水分多而甜');
INSERT INTO `goods` VALUES (3, '苹果手机', 18000.00, 1, 1, '价格贵');
INSERT INTO `goods` VALUES (4, '华硕电脑', 8000.00, 1, 3, '高配置,性能强');
INSERT INTO `goods` VALUES (5, '格力空调', 2500.00, 1, 4, '格力空调,好品质,值得信赖');
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;
-- 添加数据
INSERT INTO `type` VALUES (1, '手机');
INSERT INTO `type` VALUES (2, '水果');
INSERT INTO `type` VALUES (3, '电脑');
INSERT INTO `type` VALUES (4, '电器');
2.idea创建项目
(1)进入创建项目查窗口
##### (2)选择Springboot版本 和 所需要的依赖
##### (3)创建完成后导入 mybatis依赖
<!--Springboot整合mybatis依赖包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
3.创建三层架构 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);
/**
* 根据id删除商品信息
* @param id
* @return
*/
int deleteGoodsById(@Param("id") Integer id);
/**
* 根据id查询商品信息
* @param id
* @return
*/
Goods findGoodsById(@Param("id") Integer id);
/**
* 根据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 和 实现接口 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);
}
再实现接口,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.使用数据统一格式 工具类util
(1)统一返回的数据类型 和 状态码
封装数据类:R
/**
* 统一返回数据 json 格式 前后端 分离 json
**/
@Data
public class R {
//状态值
private Boolean success;
//状态吗
private Integer code;
//数据
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, "参数不正确"),
FILE_UPLOAD_ERROR(false, 21004, "文件上传错误"),
EXCEL_DATA_IMPORT_ERROR(false, 21005, "Excel数据导入错误"),
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 配置文件编写
# 设置端口
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.编写业务代码 (crud)
(1)创建 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,国产的Http请求测试工具,使用教程如下:
(2)Http请求:
查询选择: GET 请求
localhost:8080/getAll
增加选择:POST 请求
localhost:8080/addGoods
增加数据时,需要加入参数:
删除选择:DELETE 请求 或者 POST 请求
localhost:8080/deleteGoods
删除数据时,根据id删除:
修改选择:PUT 请求 或者 POST 请求
localhost:8080/updateGoods
修改数据时,根据id修改,和修改那些数据(我使用了mybatis的动态sql,所以修改指定数据即可,看您的需求)
文章来源:https://www.toymoban.com/news/detail-816054.html
查询选择:GET 请求
localhost:8080/getGoods
文章来源地址https://www.toymoban.com/news/detail-816054.html
到了这里,关于Springboot整合mybatis实现增删改查(crud)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!