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

news2024/11/25 6:58:39

一、案例需求

基于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.Driver
    url: jdbc:mysql://localhost:3306/student
    username: root
    password: root

# 配置MyBatis
mybatis:
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  type-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 {

    @Autowired
    private 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 {

    @Resource
    private BookMapper bookMapper;

    @Override
    public void saveBook(Book book) {
        bookMapper.saveBook(book);
    }

    @Override
    public void updateBook(Book book) {
        bookMapper.updateBook(book);
    }

    @Override
    public void delBook(String id) {
        bookMapper.delBook(id);
    }

    @Override
    public 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_book
        set 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.coloradmin.cn/o/881924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“继承与组合:代码复用的两种策略“

White graces&#xff1a;个人主页 &#x1f439;今日诗词:"故人陆续凋零&#xff0c;好似风中落叶啊"&#x1f439; &#x1f649; 内容推荐:“掌握类与对象&#xff0c;点亮编程之路“(下)&#x1f649; &#x1f649;专栏推荐:“Java入门指南&#xff1a;从零开…

案例17 基于Spring Boot+MyBatis的学生信息维护案例

一、案例需求 基于Spring BootMyBatis实现学生信息的新增、修改、删除、查询功能&#xff0c;并实现MySQL数据库的操作。 MySQL数据库创建学生表&#xff08;t_student&#xff09;&#xff0c;有主键、姓名、年龄、性别、出生日期、身份证号、电话号码信息。 二、数据初始化…

07 - 查看、创建、切换和删除分支

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. 查看分支2. 创建和切换分支3. 删除分支 1. 查看分支 git branch -va2. 创建和切换分支 第一种&#xff1a; 创建分支&#xff1a; git branch new_branch切换分支&#xff1a; …

PHP实现在线年龄计算器

1. 输入日期查询年龄 2. php laravel框架实现 代码 /*** 在线年龄计算器*/public function ageDateCal(){// 输入的生日时间$birthday $this->request(birthday);// 当前时间$currentDate date(Y-m-d);// 计算周岁$age date_diff(date_create($birthday), date_create($…

Linux 多进程

目录 0x01 linux中特殊的进程 0x02 进程的标识 0x03 创建子进程 0x01 linux中特殊的进程 0号进程&#xff1a;idle进程&#xff0c;系统启动加载的进程1号进程&#xff1a;systemd进程&#xff0c;系统初始化&#xff0c;是所有进程的祖先进程 init2号进程&#xff1a;kthre…

Zabbix监控Kubernets获取节点模板报错

Preprocessing failed for: {“error”:"Request failed with status code 401: {“kind”:“Status”,“apiVersion”:“v1”,"met ad …1. Failed: Discovery error: TypeError: cannot read property 1 of null. Zabbix 监控 Kubernetes 出现采集错误&#xff0c;…

麒麟系统相关

创建虚拟机 镜像下载地址 选择合适的镜像&#xff0c;进入引导后注意不要选择默认的第一条&#xff0c;选择第二条进入安装程序。 root密码修改 使用命令 sudo passwd root 开启ssh 配置好网络后发现能ping通&#xff0c;但无法ssh连接&#xff0c;ps -ef | grep ssh 得…

基于docker实现主从复制

1&#xff1a;实现主从复制这个过程我是趟过坑的&#xff0c;后面是自己动手搞了几遍都成功了以后才开始决定记录的&#xff0c;&#xff08;所以有的截图和上下文对不上的&#xff0c;比如说docker容器的名字对应不上&#xff0c;大家就用自己的就好&#xff09;&#xff0c;打…

“数据”对于仓库管理有多重要?!

仓库数据的重要性 做好仓库数据管理对企业的重要性不言而喻。通过有效地管理数据&#xff0c;企业可以更好地了解市场需求和库存情况&#xff0c;快速响应市场变化&#xff0c;提高库存周转率和客户满意度&#xff1b;此外&#xff0c;数据管理还可以帮助企业降低库存成本、减…

提升物流管理效率,快递批量查询高手软件助你一臂之力

物流管理中&#xff0c;准确跟踪和掌握快递的物流信息是非常重要的。而快递批量查询高手软件的出现&#xff0c;大大提高了物流管理的效率&#xff0c;为企业带来了诸多便利。 传统的快递查询方式往往需要手动逐个输入快递单号&#xff0c;费时费力且容易出错。而有了快递批量查…

源于传承,擎领未来,新架构、新工艺下的“换心工程”——金融电子化访中电金信副总经理、研究院院长况文川

当前&#xff0c;商业银行的经营环境正在发生着深刻而复杂的变化&#xff0c;在深化改革主旋律的指引下&#xff0c;数字化转型已成为我国商业银行普遍认同、广泛采用的战略性举措。核心系统作为承载银行业务的关键支柱系统&#xff0c;一直是各银行在金融科技建设中重点关注和…

Linux/centos上如何配置管理NFS服务器?

Linux/centos上如何配置管理NFS服务器&#xff1f; 1 NFS基础了解1.1 NFS概述1.2 NFS工作流程 2 安装和启动NFS服务2.1 安装NFS服务器2.2 启动NFS服务 3 配置NFS服务器和客户端3.1 配置NFS服务器3.2 配置NFS客户端 4 实际示例4.1 基本要求4.2 案例实现 1 NFS基础了解 NFS&…

Android UI自动化测试框架—SoloPi简介

1、UI自动化测试简介 软件测试简介 ​软件测试是伴随着软件开发一同诞生的&#xff0c;随着软件规模大型化&#xff0c;结构复杂化&#xff0c;软件测试也从最初的简单“调试”&#xff0c;发展到当今的自动化测试。 ​ 自动化测试是什么呢&#xff1f;自动化测试是把以人为…

解析固态光耦的独特特点和优势

固态光耦概述及其重要性 固态光耦是一种电子元件&#xff0c;具有独特的光电隔离功能&#xff0c;广泛应用于电气控制、通信和电力系统等领域。本文将深入探讨固态光耦的特点和优势&#xff0c;介绍它在市场中的重要性以及如何提高收录和首页排名。 高速、高精度的信号传输 …

Dolphinscheduler简单应用(二)—— 告警通知

一、本章目标 演示Dolphinscheduler的告警通知功能,将SQL任务组件查询返回结果集指定为邮件通知内容(支持为:表格、附件或表格附件三种模板)。二、 前提条件 已完成Dolphinscheduler部署 K8S集群部署,可参考文章:基于K8S环境部署Dolphinscheduler及简单应用其他部署形式,…

LeetCode236. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先 文章目录 [236. 二叉树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/)一、题目二、题解方法一&#xff1a;递归构建祖先数组方法二&#xff1a;一个非常方便的递归 一、题目 给定一个二叉树, 找到该树中…

性能测试|App性能测试需要关注的指标

一、Android客户端性能测试常见指标&#xff1a; 1、内存 2、CPU 3、流量 4、电量 5、启动速度 6、滑动速度、界面切换速度 7、与服务器交互的网络速度 二、预期标准指定原则 1、分析竞争对手的产品&#xff0c;所有指标要强于竞品 2、产品经理给出的预期性能指标数据…

青翼科技自研2路250MSPS DA回放FMC子卡模块

FMC150_V30是一款基于VITA57.1规范的2路125MSPS采样率16位分辨率AD采集、2路250MSPS采样率16位分辨率DA回放FMC子卡模块。该模块遵循VITA57.1规范&#xff0c;可直接与符合VITA57.1规范的FPGA载卡配合使用&#xff0c;板卡ADC器件采用ADI公司的AD9268芯片&#xff0c;板卡DAC器…

DDIM: DENOISING DIFFUSION IMPLICIT MODELS

DDIM: DENOISING DIFFUSION IMPLICIT MODELS 去噪扩散隐式模型DDIM预测噪声生成过程 实验 论文题目&#xff1a;Denoising Diffusion Implicit Models (DDIM) 论文来源&#xff1a;ICLR 2021 论文地址&#xff1a;https://arxiv.org/pdf/2010.02502.pdf 论文代码&#xff1a;ht…

“之江数据安全治理论坛”暨《浙江省汽车数据处理活动规定(专家建议稿)》研讨会顺利召开

研讨会主题 8月10日&#xff0c;“之江数据安全治理论坛”暨《浙江省汽车数据处理活动规定&#xff08;专家建议稿&#xff09;》研讨会在浙江大学计算机创新技术研究院举办。 本次研讨会的主题聚焦于“智能网联汽车的数据安全与数据合规”&#xff0c;邀请行业主管部门和数据…