后端Springboot框架搭建APi接口开发(第二章)

上一章我讲述了如何使用Mybatis操作数据库。这一章我讲述如何利用Sptring框架搭建API接口

第一节:封装SqlSessionFactory工具类

在API操作数据库大量调用SqlSessionFactory,因此应将SqlSessionFactory封装成工具类供方法随时调用

在文件结构中的util文件夹下创建一个MybaitisUtil.java文件

image-20230324172133878

文件结构:demo\src\main\java\com\example\demo\util\MybatisUtil.java

package com.example.demo.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;

    //    获取sqlSessionFactory
    static {
        try {
            String resource = "Mybatis-config.xml";
            InputStream resourceAsStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //    sqlSession封装
    public static SqlSession sqlSession() {
        SqlSession sqlSession = null;
        if (sqlSessionFactory != null) {
            sqlSession = sqlSessionFactory.openSession();
        } else {
            try {
                System.out.println("程序错误!sqlSessionFactory数据无效");
                System.exit(0);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return sqlSession;
    }
}

第二节:封装json实体类

为了返回给前端的数据更加的好看、直观,因此我们可以将数据已json的格式返回给前端。

第一小节:创建APIResult实体类

在文件结构中的entity文件夹下创建一个APIResult文件,数据结构以success、data、message构成

类名数据类型说明
successboolean用于输出程序是否执行成功,输出格式为布尔值。成功为true,失败为false
dataobject用于数据获得的数据,如果没有数据就返回null
messageString用于存放输出的信息,如果没有信息就返回null

image-20230324180105767

文件结构:demo\src\main\java\com\example\demo\entity\APIResult.java

package com.example.demo.entity;

import lombok.*;

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class APIResult {
    private Boolean success;
    private Object data;
    private String message;
}

第二小节:封装APIResult工具类

现在我们写好了APIResult实体类,我们还要写一个对应的工具类调用,与SqlSessionFactory工具类类似

在文件结构中的util文件夹下创建一个APIResultUtil.java文件

image-20230324180521190

文件结构:demo\src\main\java\com\example\demo\util\APIResultUtil.java

package com.example.demo.util;

import com.example.demo.entity.APIResult;

public class APIResultUtil {
    public static APIResult apiResult(Boolean success, String message, Object data) {
        APIResult apiResult = new APIResult();
        apiResult.setSuccess(success);
        apiResult.setMessage(message);
        apiResult.setData(data);
        return apiResult;
    }
}

第三节:编写APi接口方法

现在我们封装的SqlSessionFactory和APIResult工具类已经配置完成了,我们现在就可以写APi接口的方法了。

APi接口调用封装的SqlSessionFactory方法,然后通过SqlSessionFactory执行提前编写好的查询SQL语句,获取成功后以Json输出的格式返回给前端。

在文件结构中的controller文件夹下创建一个UserApi.java文件

image-20230327172819552

文件结构:demo\src\main\java\com\example\demo\controller\UserApi.java

package com.example.demo.controller;

import com.example.demo.entity.user;
import com.example.demo.mapper.usermapper;
import com.example.demo.util.APIResultUtil;
import com.example.demo.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api")

public class UserApi {
    @RequestMapping("/GetUserList")
    public Object GetUserList() {
        try {
            SqlSession sqlSession = MybatisUtil.sqlSession();
            usermapper mapper = sqlSession.getMapper(usermapper.class);
            List<user> users = mapper.GetUserList();
            sqlSession.close();
            if (users != null) {
                return APIResultUtil.apiResult(true, "获取成功", users);
            } else {
                return APIResultUtil.apiResult(true, "无任何用户数据", null);
            }
        } catch (Exception e) {
            System.out.println("程序错误" + e);
            return APIResultUtil.apiResult(false, "程序错误", null);
        }
    }
}

第四节:启动Springboot主启动器

现在APi接口也编写完成了。现在只需要找到DemoApplication.java的启动类就可以将Stringboot跑起来了。

文件结构:demo\src\main\java\com\example\demo\DemoApplication.java

image-20230327173342645

image-20230327173403027

在控制台弹出了这些信息,并且没有结束进程。这表示就成功运行起来了

image-20230327173438767

第五节:测试接口

测试接口我推荐使用ApiPost软件

新建一个接口,在地址栏填入:http://localhost:8080/api/GetUserList

其中的api与GetUsetList都是在UserApi定义的。

image-20230327175329753

下一章讲解APi实现数据库增删改查

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端直接生成GIF动态图实践

前言去年在博客中发了两篇关于GIF动态生成的博客&#xff0c;GIF图像动态生成-JAVA后台生成和基于FFmpeg的Java视频Mp4转GIF初探&#xff0c;在这两篇博客中都是采用JAVA语言在后台进行转换。使用JAVA的同学经过自己的改造和开发也可以应用在项目上。前段时间有朋友私下问&…

MySQL主从复制、读写分离(MayCat2)实现数据同步

文章目录1.MySQL主从复制原理。2.实现MySQL主从复制&#xff08;一主两从&#xff09;。3.基于MySQL一主两从配置&#xff0c;完成MySQL读写分离配置。&#xff08;MyCat2&#xff09;1.MySQL主从复制原理。 MySQL主从复制是一个异步的复制过程&#xff0c;底层是基于Mysql数据…

设计模式之门面模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、门面模式是什么&#xff1f; 门面模式是一种结构型的软件设计模式&#xff0c;也叫外观模式&#xff0c;它提供了统一的接口去…

程序员的天花板到底有多高?

程序员是很多人眼里的职业天花板&#xff0c;毕竟薪资水平、发展前景摆在那里&#xff0c;而且&#xff0c;一个又会debug又会修电脑&#xff08;划掉&#xff09;&#xff0c;还会费心为你制造浪漫的程序员&#xff0c;有谁不喜欢呢&#xff1f; 但现实中很多程序员都焦虑担忧…

从0使用TCP手撸http服务器六

html模板设计&#xff1a; 上篇我们说到通过路由去返回不同的html页面&#xff0c;如果每一个页面都是一个数组的话&#xff0c;那么我们可能需要很多数组&#xff0c;里面很多内容都是一样的&#xff0c;这样子会浪费我们单片机很多flash&#xff0c;我们需要把共同的部分固定…

神经网络之反向传播算法(加入Nesterov动量的误差反向传播算法)

文章目录1、Nesterov动量2、结合Nesterov动量的误差反向传播算法3、算法实现3.1 训练过程3.2 测试过程4、参考源码及数据集1、Nesterov动量 在动量法提出不久之后&#xff0c;Nesterov动量也随之被提了出来&#xff0c;此方法属于动量法的进一步发展&#xff0c;与动量法不同的…

基于windows11配置深度学习环境包含WSL2配置ubuntu20.04

基于windows11配置深度学习环境包含WSL2配置ubuntu20.04目录平台WSL2 系统准备(Windows Subsystem of Linux)安装WSL2基于WSL2中的Ubuntu安装CUDA和cudnnCUDA 安装目录 平台 系统 : windows11 专业版 CPU Intel I7 8750hq 显卡&#xff1a;Nvidia GTX1060移动端 显卡驱动版本…

安装Windows11提示这台电脑不符合安装此版本的Windows所需的最低系统要求

现在很多用户都会选择用U盘来安装系统&#xff0c;最新有用户在使用U盘安装Win11系统的时候&#xff0c;结果安装到第一步就提示这台电脑无法运行Windows11&#xff0c;这台电脑不符合安装此版本的Windows所需的最低系统要求。下面小编就来教大家解决此问题的方法。 问题解析&a…

BIO/NIO/AIO/IO多路复用简介

bio、nio、aio、io多路复用、reactor模式io&#xff0c;在将IO的时候&#xff0c;是不是都遇到过这些概念&#xff0c;也有种傻傻分不清&#xff1f;甚至别人在大谈特谈的时候&#xff0c;一会nio&#xff0c;一会io多路复用&#xff0c;一会又搞到reactor模式上去了&#xff1…

一文搞懂原型和原型链

在了解原型和原型链之前首先得明确它俩是什么东西&#xff1a; 原型&#xff1a;prototype 又称显示原型 1、原型是一个普通对象 2、只有构造函数才具备该属性 3、公有属性可操作 隐式原型&#xff1a;__proto__ 1、只有对象(普通对象、函数对象&#xff09;具备 2、私有的对…

《Spring系列》第2章 解析XML获取Bean

一、基础代码 Spring加载bean实例的代码 public static void main(String[] args) throws IOException {// 1.获取资源Resource resource new ClassPathResource("bean.xml");// 2.获取BeanFactoryDefaultListableBeanFactory factory new DefaultListableBeanFa…

Airtest自动化测试工具实战演练

一开始知道Airtest大概是在年初的时候&#xff0c;当时&#xff0c;看了一下官方的文档&#xff0c;大概是类似Sikuli的一个工具&#xff0c;主要用来做游戏自动化的&#xff0c;通过截图的方式用来解决游戏自动化测试的难题。最近&#xff0c;移动端测试的同事尝试用它的poco库…

iwebsec靶场-命令执行漏洞

漏洞简介 命令执行漏洞&#xff08;Command Injection&#xff09;是一种常见的安全漏洞&#xff0c;也被称为代码注入漏洞。它允许攻击者将恶意代码注入到受攻击的应用程序中&#xff0c;从而可以在应用程序的上下文中执行任意命令。 命令执行漏洞通常出现在Web应用程序中&…

好的表单设计应该遵循什么规则?

在数字化时代&#xff0c;表单已经成为了人们生活中不可或缺的一部分。它们可能是网站注册表格、调查问卷、订单表格或者其他类型的表格。无论表单的类型是什么&#xff0c;都必须经过精心设计才能提供良好的用户体验。在本文中&#xff0c;我们将探讨如何设计一份用户体验好的…

Redis缓存双写一致性

目录双写一致性Redis与Mysql双写一致性canal配置流程代码案例双写一致性理解缓存操作细分缓存一致性多种更新策略挂牌报错,凌晨升级先更新数据库,在更新缓存先删除缓存,在更新数据库先更新数据库,在删除缓存延迟双删策略总结双写一致性 Redis与Mysql双写一致性 canal 主要是…

低代码开发公司:用科技强力开启产业分工新时代!

实现办公自动化&#xff0c;是不少企业的共同追求。低代码开发公司会遵循时代发展规律&#xff0c;注入强劲的科技新生力量&#xff0c;在低代码开发市场厚积爆发、努力奋斗&#xff0c;推动企业数字化转型升级&#xff0c;为每一个企业的办公自动化升级创新贡献应有的力量。 一…

【数据结构与算法】堆的实现(附源码)

目录 一.堆的概念及结构 二.接口实现 A.初始化 Heapinit 销毁 Heapdestroy B.插入 Heappush 向上调整 AdjustUp 1.Heappush 2.AdjustUp C.删除 Heappop 向下调整 AdjustDown D.堆的判空 Heapempty 堆顶数据 Heaptop 堆的大小 Heapsize 三.源码 Heap.h He…

【模板】带权并查集

文章目录1. 奇偶游戏2. 银河英雄传说1. 奇偶游戏 239. 奇偶游戏 题意&#xff1a; 依次给出多个区间的含 111 的个数的奇偶性&#xff0c;找出第一个不符合的答案的回答。 思路&#xff1a; 已知区间[a,b][a,b][a,b][b,c][b,c][b,c]的奇偶性&#xff0c;那么具有传递性&…

分享一个国内可用的免费ChatGPT网站(自己写的)

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 作为一个程序员&#xff0c;我也忍不住做了一个基于ChatGPT的网站&#xff0c;免费&#xff01;免登陆&#xff01;&#xff01;国内可直接对话ChatGPT&#xff0c;也…

10.线性表代码实战

10.1 与408关联解析及本节内容介绍 链表比顺序表出现的顺序更加的频繁。 10.2线性表地顺序表示原理解析 线性表的特点&#xff1a; &#xff08;1&#xff09;表中的元素的个数是有限的 &#xff08;2&#xff09;表中元素的数据类型相同。意味着每一个元素占用相同大小的空…