案例18 基于Spring Boot+MyBatis的图书信息维护案例

一、案例需求

基于Spring Boot+MyBatis实现图书信息的新增、修改、删除、查询功能,并实现MySQL数据库的操作。

MySQL数据库创建图书表(t_book),图书表有主键、图书名称、图书类别、作者、出版社、简介信息。

二、数据初始化

  • 创建t_book表

create table t_book(id varchar(32),name varchar(50),category varchar(20),author varchar(50),press varchar(50),content varchar(200)   
);
  • 初始化数据

insert into t_book values('1001','西游记','文学名著','吴承恩','人民文学','师徒四人取经');
insert into t_book values('1002','水浒传','文学名著','施耐庵','人民文学','梁山108好汉');

三、代码实现

1. 创建Spring Boot项目

创建Spring Boot项目,项目名称为springboot-book01。

2. 选择依赖

pom文件如下所示:

<dependencies><!--spring boot web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><!--mysql--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

3. 创建配置文件

resources目录下创建application.yml。

# 配置端口号
server:port: 8090# 配置数据源
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/studentusername: rootpassword: root# 配置MyBatis
mybatis:mapper-locations: classpath*:mapper/**/*Mapper.xmltype-aliases-package: com.wfit

4. 创建Constants常量类

com.wfit.boot.commons目录下创建Constants.java。

public class Constants {// 默认成功码public static final int SUCCESS_CODE = 200;public static final String SUCCESS_MSG = "操作成功";// 默认失败码public static final int ERROR_CODE = 500;public static final String ERROR_MSG = "系统异常";
}

5. 创建Result类

com.wfit.boot.commons目录下创建Result.java。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {//响应码private int code;//响应消息private String msg;//响应结果private T data;public static <T> Result<T> success(T data){return new Result<>(Constants.SUCCESS_CODE,Constants.SUCCESS_MSG,data);}public static <T> Result<T> error(T data){return new Result<>(Constants.ERROR_CODE,Constants.ERROR_MSG,data);}}

6. 创建Book实体类

com.wfit.boot.model目录下创建Book.java。

@Data
public class Book {private String id;private String name;private String category;private String author;private String press;private String content;}

7. 创建BookController类

com.wfit.boot.controller目录下创建BookController.java。

@RestController     //@Controller和@ResponseBody两个注解的结合
@RequestMapping("/book")
public class BookController {@Autowiredprivate BookService bookService;/*** 新增图书信息*/@PostMapping("/add")    //@RequestMapping(method = {RequestMethod.POST})public Result addBook(@RequestBody Book book){bookService.saveBook(book);return Result.success("新增成功!");}/*** 修改图书信息*/@PostMapping("/update")public Result updateBook(@RequestBody Book book){bookService.updateBook(book);return Result.success("修改成功!");}/*** 删除图书信息*/@GetMapping("/del")  //@RequestMapping(method = {RequestMethod.GET})public Result delBook(String id){bookService.delBook(id);return Result.success("删除成功!");}/*** 查询图书信息*/@GetMapping("/query")public Result queryBook(){List<Book> bookList = bookService.queryBook();return Result.success(bookList);}
}

8. 创建BookService接口

com.wfit.boot.service目录下创建BookService.java。

public interface BookService {public void saveBook(Book book);public void updateBook(Book book);public void delBook(String id);public List<Book> queryBook();}

9. 创建BookServiceImpl类

com.wfit.boot.service.impl目录下创建BookServiceImpl.java。

@Service
public class BookServiceImpl implements BookService {@Resourceprivate BookMapper bookMapper;@Overridepublic void saveBook(Book book) {bookMapper.saveBook(book);}@Overridepublic void updateBook(Book book) {bookMapper.updateBook(book);}@Overridepublic void delBook(String id) {bookMapper.delBook(id);}@Overridepublic List<Book> queryBook() {return bookMapper.queryBook();}
}

10. 创建BookMapper接口

com.wfit.boot.mapper目录下创建BookMapper.java。

@Mapper
public interface BookMapper {public void saveBook(Book book);public void updateBook(Book book);public void delBook(String id);public List<Book> queryBook();
}

11. 创建BookMapper.xml文件

resources.mapper目录下创建BookMapper.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.wfit.boot.mapper.BookMapper"><!--新增图书信息--><insert id="saveBook" parameterType="com.wfit.boot.model.Book">insert into t_book values(#{id},#{name},#{category},#{author},#{press},#{content})</insert><!--修改图书信息--><update id="updateBook" parameterType="com.wfit.boot.model.Book">update t_bookset name = #{name}, category = #{category}where id = #{id}</update><!--删除图书信息--><delete id="delBook" parameterType="java.lang.String">delete from t_book where id = #{id}</delete><!--查询图书信息--><select id="queryBook" resultType="com.wfit.boot.model.Book">select *from t_book</select>
</mapper>

12. 项目结构

四、案例测试

1. 测试新增图书信息

2. 测试修改图书信息

3. 测试删除图书信息

4. 测试查询图书信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/91704.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吐血整理,接口自动化测试-接口依赖/上传接口处理(项目实例)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 常见的两种接口依…

【Vue-Router】别名

后台返回来的路径名不合理&#xff0c;但多个项目在使用中了&#xff0c;不方便改时可以使用别名。可以有多个或一个。 First.vue <template><h1>First Seciton</h1> </template>Second.vue&#xff0c;Third.vue代码同理 UserSettings.vue <tem…

vue 获取设备指纹

import Fingerprint2 from fingerprintjs2 // async 异步请求 async getFingerprint () {return new Promise((resolve, reject) > {Fingerprint2.getV18({}, (result, components) > {resolve(result)})})}, // 获取用户sessionasync getSession () {/* 等待获取设备指纹…

【C# 基础精讲】继承、封装、多态

继承&#xff08;Inheritance&#xff09;、封装&#xff08;Encapsulation&#xff09;和多态&#xff08;Polymorphism&#xff09;是面向对象编程中的三大核心概念&#xff0c;它们构成了面向对象编程的基础&#xff0c;有助于创建更加模块化、可扩展和可维护的代码。这三个…

【教程】零成本将小米净化器改造为无叶风扇

某宝某多上&#xff0c;就这么点破塑料&#xff0c;就要买79&#xff1f;&#xff01;&#xff01; 我这枚韭菜可不上当。咱自己做一个&#xff01; 真香~

ansible的playbook剧本

playbook剧本 PlayBook1.playbooks 本身由以下各部分组成2.示例&#xff1a;3.运行playbook补充参数&#xff1a; 4.定义、引用变量5.指定远程主机sudo切换用户6.when条件判断7.迭代8.Templates 模块1.先准备一个以 .j2 为后缀的 template 模板文件&#xff0c;设置引用的变量2…

【Java】2021 RoboCom 机器人开发者大赛-高职组(初赛)题解

7-1 机器人打招呼 机器人小白要来 RoboCom 参赛了&#xff0c;在赛场中遇到人要打个招呼。请你帮它设置好打招呼的这句话&#xff1a;“ni ye lai can jia RoboCom a?”。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在一行中输出 ni ye lai can jia Robo…

Cesium--一些实验过程中的效果记录

1.一种反射效果&#xff1a; 片元着色器代码 fragmentShaderSource:in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), ve…

Hands on RL 之 Deep Deterministic Policy Gradient(DDPG)

Hands on RL 之 Deep Deterministic Policy Gradient&#xff08;DDPG&#xff09; 文章目录 Hands on RL 之 Deep Deterministic Policy Gradient&#xff08;DDPG&#xff09;1. 理论部分1.1 回顾 Deterministic Policy Gradient(DPG)1.2 Neural Network Difference1.3 Why i…

Vue数组变更方法和替换方法

一、可以引起UI界面变化 Vue 将被侦听的数组的变更方法进行了包裹&#xff0c;所以它们也将会触发视图更新。这些被包裹过的方法包括&#xff1a; push()pop()shift()unshift()splice()sort()reverse() 以上七个数组都会改变原数组&#xff0c;下面来分别讲解它们的区别&…

Electron 应用实现截图并编辑功能

Electron 应用实现截图并编辑功能 Electron 应用如何实现截屏功能&#xff0c;有两种思路&#xff0c;作为一个框架是否可以通过框架实现截屏&#xff0c;另一种就是 javaScript 结合 html 中画布功能实现截屏。 在初步思考之后&#xff0c;本文优先探索使用 Electron 实现截屏…

C++11实用技术(四)for循环该怎么写

普通用法 在C遍历stl容器的方法通常是&#xff1a; #include <iostream> #include <vector>int main() {std::vector<int> arr {1, 2, 3};for (auto it arr.begin(); it ! arr.end(); it){std::cout << *it << std::endl;}return 0; }上述代…

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法

Word 2019打开.doc文档后图片和公式不显示&#xff08;呈现为白框&#xff09;的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示&#xff08;呈现为白框&#xff09;的解决办法一、问题描述二、解决方法1.打开 WORD 2019&#xff0c;点击菜单中的“文件”&#xff1b;…

【笔试题心得】排序算法总结整理

排序算法汇总 常用十大排序算法_calm_G的博客-CSDN博客 以下动图参考 十大经典排序算法 Python 版实现&#xff08;附动图演示&#xff09; - 知乎 冒泡排序 排序过程如下图所示&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻…

杨氏矩阵!!!!

杨氏矩阵&#x1f438; &#x1f4d5;题目要求&#xff1a; 杨氏矩阵 题目内容&#x1f4da;&#xff1a; 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 &#x1f9e0;题…

Microsoft ISA服务器配置及日志分析

Microsoft ISA 分析器工具&#xff0c;可分析 Microsoft ISA 服务器&#xff08;或 Forefront 威胁管理网关服务器&#xff09;的日志并生成安全和流量报告。支持来自 Microsoft ISA 服务器组件的以下日志&#xff1a; 数据包过滤器ISA 服务器防火墙服务ISA 服务器网络代理服务…

24届近3年青岛理工大学自动化考研院校分析

今天给大家带来的是青岛理工大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、青岛理工大学 学校简介 青岛理工大学是一所以工为主&#xff0c;土木建筑、机械制造、环境能源学科特色鲜明&#xff0c;理工经管文法艺等学科协调发展的多科性大学。是国家首批地方…

安达发APS|APS排产软件之计划甘特图

在当今全球化和竞争激烈的市场环境下&#xff0c;制造业企业面临着巨大的压力&#xff0c;如何在保证产品质量、降低成本以及满足客户需求的同时&#xff0c;提高生产效率和竞争力成为企业需要迫切解决的问题。在这个背景下&#xff0c;生产计划的制定和执行显得尤为重要。然而…

LCS最大公共子序列 与 LIS最大递增子序列

LCS Largest Common Subsequence 最大公共子序列 /* Input s1 s2//两个字符串Output length//长度 ans//具体字母 */ #include<iostream> using namespace std; int main() {string s1,s2;cin>>s1>>s2;int dp[100][100]{0};//dp[i][j]表示s1取前i位&#x…

(二)结构型模式:5、装饰器模式(Decorator Pattern)(C++实例)

目录 1、装饰器模式&#xff08;Decorator Pattern&#xff09;含义 2、装饰器模式的UML图学习 3、装饰器模式的应用场景 4、装饰器模式的优缺点 5、C实现装饰器模式的简单实例 1、装饰器模式&#xff08;Decorator Pattern&#xff09;含义 装饰模式&#xff08;Decorato…