9.spring-图书管理系统

news2024/9/29 21:18:19

文章目录

  • 1.开发项目流程
    • 1.1开发开发
    • 1.2数据库的设计
  • 2.MySQL数据库相关代码
  • 3.构造图书结构
    • 3.1用户登录
    • 3.2图书列表
    • 3.3图书添加
    • 3.4图书删除
      • 3.4.1批量删除
    • 3.5图书查询(翻页)
  • 4.页面展示
    • 4.1登录页面
    • 4.2列表页面
    • 4.3增加图书页面
    • 4.4修改图书信息页面
  • 5.功能展示
    • 5.1增加图书信息
    • 5.2修改图书信息
    • 5.3删除单个图书
    • 5.4批量删除图书
    • 5.5翻页功能
  • 7.拓展知识
    • 7.1SpringBoot 中的mapper,service,controller,model 分别有什么用?
    • 7.2DAO层、Service层和Controller层的区别
    • 7.3 SSM系统架构
    • 7.4MySQL(关系型数据库)和mongodb(非关系型数据库)的区别
    • 7.5redis(非关系型数据库)

大家好,我是晓星航。今天为大家带来的是 相关的讲解!😀

1.开发项目流程

1.1开发开发

1.需求确认阶段:需求分析,需求评审

2.开发

1)方案设计
2)接口定义
3)开发业务代码
4)测试(自测+联调) - 和其他团队一起联合测试

3.提测阶段 - 测试人员

4.上线(发布)阶段

1.2数据库的设计

image-20240324143734595

数据库编码:

1.安装时修改

2.建表时修改

2.MySQL数据库相关代码

1.建库

create databases book_test default character set utf8mb4;

2.建表

用户表:

DROP TABLE IF EXISTS user_info;
CREATE TABLE user_info (
    id INT NOT NULL AUTO_INCREMENT,
    user_name VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    delete_flag TINYINT(4) NULL DEFAULT 0,
    create_time DATETIME DEFAULT now(),
    update_time DATETIME DEFAULT now() ON UPDATE now(),
    PRIMARY KEY(id),
UNIQUE INDEX user_name_UNIQUE (user_name ASC)) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COMMENT ='用户表';

图书表:

DROP TABLE IF EXISTS book_info;
CREATE TABLE book_info (
    id INT(11) NOT NULL AUTO_INCREMENT,
    book_name VARCHAR(127) NOT NULL,
    author VARCHAR(127) NOT NULL,
    count INT(11) NOT NULL,
    price DECIMAL(7,2) NOT NULL,
    publish VARCHAR(256) NOT NULL,
    status TINYINT(4) DEFAULT 1 COMMENT '0-无效,1-正常,2-不允许借阅',
    create_time DATETIME DEFAULT noW(),
    update_time DATETIME DEFAULT now() ON UPDATE now(),
PRIMARY KEY (id)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;

3.插入数据检验

用户表插入数据:

-- 初始化数据
INSERT INTo user_info (user_name,PASSWORD) VALUES ("admin","admin");
INSERT INTO user_info( user_name,PASSWORD) VALUES ("zhangsan","123456");

图书表插入数据:

-- 初始化图书数据
INSERT INTO book_info (book_name,author,count,price, publish) VALUES ('活着','余华',29,22.00,'北京文艺出版社');
INSERT INTO book_info (book_name,author,count,price, publish) VALUES ('平凡的世界','路遥',5,98.56,'北京十月文艺出版社');
INSERT INTO book_info (book_name,author,count,price,publish) VALUES ('三体','刘慈欣',9,102.67,'重庆出版社');
INSERT INTO book_info (book_name,author,count,price,publish) VALUES ('金字塔原理','麦肯锡',16,178.00,'民主与建设出版社');

批量化构造数据:

INSERT INTO book_info (book_name,author,count,price,publish) VALUES ('图书2','作者2',29,22.00,'出版社2'),('图书3','作者2',29,22.00,'出版社3'),('图书4','作者2',29,22.00,'出版社4'),('图书5','作者2',29,22.00,'出版社5'),('图书6','作者2',29,22.00,'出版社6'),('图书7','作者2',29,22.00,'出版社7'),('图书8','作者2',29,22.00,'出版社8'),('图书9','作者2',29,22.00,'出版社9'),('图书10','作者2',29,22.00,'出版社10'),('图书11','作者2',29,22.00,'出版社11');
INSERT INTO book_info (book_name,author,count,price,publish) VALUES ('图书12','作者2',29,22.00,'出版社12'),('图书13','作者2',29,22.00,'出版社13'),('图书14','作者2',29,22.00,'出版社14'),('图书15','作者2',29,22.00,'出版社15'),('图书16','作者2',29,22.00,'出版社16'),('图书17','作者2',29,22.00,'出版社17'),('图书18','作者2',29,22.00,'出版社18'),('图书19','作者2',29,22.00,'出版社19'),('图书20','作者2',29,22.00,'出版社20'),('图书21','作者2',29,22.00,'出版社21');

3.构造图书结构

3.1用户登录

约定前后端交互接口

[请求]
/user/login
Content-Type:application/x-www-form-urlencoded; charset-UTF-8


[参数]
name=zhangsan&password=123456

[响应]
true //账号密码验证正确,否则返回false

实现服务器代码

控制层

从数据库中,根据名称查询用户,如果可以查到,并且密码一致,就认为登录成功

import com.example.demo.model.UserInfo;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.stringutils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.Restcontroller;

import javax.servlet.http.HttpSession;

@RequestMapping("/user")
@Restcontrnller

model层 - 存放实体类:

UserInfo.java:

package com.example.book.model;

import lombok.Data;

import java.util.Date;

@Data
public class UserInfo {
    private Integer id;
    private String userName;
    private String password;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

Controller层:

UserController.java:

package com.example.book.controller;

import com.example.book.constant.Constants;
import com.example.book.model.UserInfo;
import com.example.book.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

@RequestMapping("/user")
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/login")
    public Boolean login(String userName, String password, HttpSession session){
        //校验参数
        if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){
            return false;
        }
        //验证账号密码是否正确
        /**
         * if (userName.equals("admin")){ }  这种写法, 如果userName为null, 会报空指针异常
         * 开发习惯, 养成
         */
        //1. 根据用户名去查找用户信息
        UserInfo userInfo = userService.getUserInfoByName(userName);
        //2. 比对密码是否正确
        if (userInfo==null || userInfo.getId()<=0){
            return false;
        }
        if (password.equals(userInfo.getPassword())){
            //账号密码正确
            //存Session
            userInfo.setPassword("");
            session.setAttribute(Constants.SESSION_USER_KEY,userInfo);
            return true;
        }

        return false;

    }
}

根据用户名查用户信息,比对验证密码是否正确,账号密码正确后存Session,登录成功!

service层 - 主要是针对具体的问题的操作,把一些数据层的操作进行组合,间接与数据库打交道:

UserService.java:

package com.example.book.service;

import com.example.book.mapper.UserInfoMapper;
import com.example.book.model.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserInfoMapper userInfoMapper;

    public UserInfo getUserInfoByName (String name) {
        return userInfoMapper.selectUserByName(name);
    }
}

Mapper层(Dao层):

UserInfoMapper.java:

package com.example.book.mapper;

import com.example.book.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserInfoMapper {
    /**
     * 根据用户名称查询用户信息
     * @param name
     * @return
     */
    @Select("select * from user_info where user_name=#{name}")
    UserInfo selectUserByName(String name);

}

3.2图书列表

可以由前端完成也可以由后端完成

前端完成:

image-20240325153145143

后端完成:

image-20240325153153208

model层 - 存放实体类:

PageResult.java:

package com.example.book.model;

import lombok.Data;

import java.util.List;

@Data
public class PageResult<T> {
    /**
     * 当前页的记录
     */
    private List<T> records;
    /**
     * 总记录数
     */
    private Integer total;

    private PageRequest pageRequest;

    public PageResult(List<T> records, Integer total,PageRequest pageRequest) {
        this.records = records;
        this.total = total;
        this.pageRequest = pageRequest;
    }
}

PageRequest.java:

package com.example.book.model;

import lombok.Data;

@Data
public class PageRequest {
    /**
     * 当前页码
     */
    private Integer currentPage=1;
    /**
     * 每页显示条数
     */
    private Integer pageSize=10;

    private Integer offset;

    public Integer getOffset() {
        return (currentPage-1) * pageSize;
    }
}

controller层:

BookController.java

package com.example.book.controller;

import com.example.book.model.*;
import com.example.book.service.BookService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.List;


@Slf4j
@RequestMapping("/book")
@RestController
public class BookController {

    @Autowired
    private BookService bookService;

    @RequestMapping("/getBookListByPage")
    public Result getBookListByPage(PageRequest pageRequest, HttpSession session){
        log.info("查询翻页信息, pageRequest:{}",pageRequest);
//        //用户登录校验
//        UserInfo userInfo = (UserInfo) session.getAttribute(Constants.SESSION_USER_KEY);
//        if (userInfo==null|| userInfo.getId()<=0 || "".equals(userInfo.getUserName())){
//            //用户未登录
//            return Result.unlogin();
//        }
        //校验成功
        if (pageRequest.getPageSize()<0 || pageRequest.getCurrentPage()<1){
            return Result.fail("参数校验失败");
        }
        PageResult<BookInfo> bookInfoPageResult = null;
        try {
            bookInfoPageResult = bookService.selectBookInfoByPage(pageRequest);
            return Result.success(bookInfoPageResult);
        }catch (Exception e){
            log.error("查询翻页信息错误,e:{}",e);
            return Result.fail(e.getMessage());
        }
    }
}

service层:

BookService.java:

package com.example.book.service;

import com.example.book.enums.BookStatusEnum;
import com.example.book.mapper.BookInfoMapper;
import com.example.book.model.BookInfo;
import com.example.book.model.PageRequest;
import com.example.book.model.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
public class BookService {

    @Autowired
    private BookInfoMapper bookInfoMapper;

    public PageResult<BookInfo> selectBookInfoByPage(PageRequest pageRequest) {
        if (pageRequest == null) {
            return null;
        }
        //获取总记录数
        Integer count = bookInfoMapper.count();
        //获取当前记录
        List<BookInfo> bookInfos = bookInfoMapper.selectBookInfoByPage(pageRequest.getOffset(), pageRequest.getPageSize());
        if (bookInfos != null && bookInfos.size() > 0) {
            for (BookInfo bookInfo : bookInfos) {
                //根据status 获取状态的定义
                bookInfo.setStatusCN(BookStatusEnum.getNameByCode(bookInfo.getStatus()).getName());
            }
        }

        return new PageResult<>(bookInfos, count, pageRequest);

    }

    /**
     * 添加图书
     *
     * @param bookInfo
     * @return
     */
    public Integer addBook(BookInfo bookInfo) {
        Integer result = 0;
        try {
            result = bookInfoMapper.insertBook(bookInfo);
        } catch (Exception e) {
            log.error("添加图书出错, e:{}", e);
        }
        return result;
    }

    public BookInfo queryBookInfoById(Integer id) {
        return bookInfoMapper.queryBookInfoById(id);
    }

    /**
     * 更新图书
     * @param bookInfo
     * @return
     */
    public Integer updateBook(BookInfo bookInfo) {
        Integer result = 0;
        try {
            result = bookInfoMapper.updateBook(bookInfo);
        } catch (Exception e) {
            log.error("更新图书失败, e:{}", e);
        }
        return result;
    }
    public Integer batchDelete(List<Integer> ids){
        Integer result =0;
        try {
            result = bookInfoMapper.batchDelete(ids);
        }catch (Exception e){
            log.error("批量删除图书失败, ids:{}",ids);
        }
        return result;
    }
}

mapper层:

BookInfoMapper.java:

package com.example.book.mapper;

import com.example.book.model.BookInfo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface BookInfoMapper {
    /**
     * 获取当前页的信息
     * @param offset
     * @param pageSize
     * @return
     */
    @Select("select * from book_info where status !=0 " +
            "order by id desc limit #{offset},#{pageSize}")
    List<BookInfo> selectBookInfoByPage(Integer offset, Integer pageSize);

    /**
     * 获取总记录数
     * @return
     */
    @Select("select count(1) from book_info where status !=0")
    Integer count();

    @Insert("insert into book_info (book_name,author, count, price, publish, status) " +
            "values(#{bookName}, #{author}, #{count}, #{price},#{publish}, #{status})")
    Integer insertBook(BookInfo bookInfo);

    @Select("select * from book_info where id =#{id}")
    BookInfo queryBookInfoById(Integer id);

    Integer updateBook(BookInfo bookInfo);


    Integer batchDelete(List<Integer> ids);
}

3.3图书添加

前端代码:

image-20240326152454105

Controller层:

image-20240326152529837

service层:

image-20240326152608120

mapper层(Dao层):

image-20240326152634176

3.4图书删除

企业中很少使用delete语句
delete语句通常是在进行数据修复时才会使用

pg.测试人员进行测试,手工造一些数据,测试完成之后,这条数据就是脏数据了
这个脏数据(假数据) 没有任何价值的,需要把数据删掉,使用delete语句

逻辑删除,物理删除

image-20240326101620298

image-20240326140815832

前端代码:

image-20240326141430507 image-20240326141653479

3.4.1批量删除

image-20240326141711489

Controller层:

image-20240326141747075

service层:

image-20240326142106050

mapper层(Dao层):

image-20240326141822193

3.5图书查询(翻页)

Controller层:

image-20240326152744171

service层:

image-20240326152838700

mapper层(Dao层):

image-20240326152857339

4.页面展示

4.1登录页面

image-20240326162901803

登录失败:

image-20240326162919495

登录成功:

image-20240326162934694

4.2列表页面

image-20240326163009627

4.3增加图书页面

image-20240326163149057

image-20240326163200614

4.4修改图书信息页面

image-20240326163228825

image-20240326163238887

5.功能展示

5.1增加图书信息

image-20240326163149057

image-20240326163200614

5.2修改图书信息

image-20240326163228825
image-20240326163238887

5.3删除单个图书

image-20240326163531046

image-20240326163552634

image-20240326163612445

5.4批量删除图书

image-20240326163713219

image-20240326163726067

5.5翻页功能

image-20240326163757337

image-20240326163836758

7.拓展知识

7.1SpringBoot 中的mapper,service,controller,model 分别有什么用?

MSCM:

  1. controller - 控制层

相当于MVC的C层,controller通过service的接口来控制业务流程,也可通过接收前端传过来的参数进行业务操作。

  1. model - 数据模型层

相当于MVC的M层,存放实体类,与数据库中的属性值基本保持一致。

  1. service - 业务逻辑层

主要是针对具体的问题的操作,把一些数据层的操作进行组合,间接与数据库打交道(提供操作数据库的方法)。

要做这一层的话,要先设计接口,在实现类。

  1. mapper - 数据存储对象 (Dao)

相当于DAO层,mapper层直接与数据库打交道(执行SQL语句),接口提供给service层。

图书管理系统目录:

image-20240325144321175

7.2DAO层、Service层和Controller层的区别

image-20240324112001591

简化理解:

image-20240324112329505

图书管理系统目录:

image-20240325144321175

7.3 SSM系统架构

image-20240325143656658

7.4MySQL(关系型数据库)和mongodb(非关系型数据库)的区别

image-20240326155315647

MySQL:

image-20240326155434335

mongodb:

image-20240326155459830

7.5redis(非关系型数据库)

image-20240326162500120

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

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

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

相关文章

技巧:无脑秒解“已知前序\后序与中序遍历序列,求后序\前序遍历序列”

目录 举例一 1、画坐标系&#xff1a; 2、填表&#xff1a; 3、连线 举例二 1、画坐标系 2、填表 3、连线 原理 这是一个笔试技巧&#xff0c;对代码能力没有什么提高。 可以用&#xff0c;但是代码也要会写&#xff0c;那才是根基。 相对于传统方法&#xff0c;此方法非常的快…

哈希表第1/9题--哈希表基础理论介绍

1. 哈希表的定义&#xff1a;哈希表是根据关键码的值而直接进行访问的数据结构。数组就是一张常见的哈希表&#xff0c;其中哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素。 2.哈希表的作用&#xff1a;通过哈希表可以快速判断一个元素是否出…

React 第三十一章 虚拟DOM

面试题&#xff1a;什么是虚拟DOM&#xff1f;其优点有哪些&#xff1f; 标准且浅显的答案 虚拟dom本质上就是一个普通的 JS 对象&#xff0c;用于描述视图的界面结构 虚拟 DOM 最早是由 React 团队提出来的&#xff0c;因此 React 团队在对虚拟 DOM 的定义上面有绝对的话语权。…

书生·浦语大模型实战营之 OpenCompass大模型评测

书生浦语大模型实战营之 OpenCompass &#xff1a;是骡子是马&#xff0c;拉出来溜溜 为什么要研究大模型的评测&#xff1f; 百家争鸣&#xff0c;百花齐放。 首先&#xff0c;研究评测对于我们全面了解大型语言模型的优势和限制至关重要。尽管许多研究表明大型语言模型在多…

GA-CNN-LSTM多输入分类|遗传算法-卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

2023年国赛高教杯数学建模C题蔬菜类商品的自动定价与补货决策解题全过程文档及程序

2023年国赛高教杯数学建模 C题 蔬菜类商品的自动定价与补货决策 原题再现 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c;大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据…

数字型隔离器ISO121x的用法

目录 概述 1 认识ISO121x 1.1 简介 1.2 特性 1.3 应用领域 2 ISO121x芯片结构 2.1 ISO1211引脚介绍 2.2 ISO1211的通用应用电路 2.3 Layout Example 3 应用范例 3.1 TI提供的评估板 3.2 评估板的原理图电路 概述 本文主要介绍ISO121x的相关特性&#xff0c;以及其…

C++随手写一个打字练习软件TL(TypeLetters)附原码

C随手写一个打字练习软件TL&#xff08;TypeLetters&#xff09;附原码 说明 软件名称&#xff1a;TL&#xff08;TypeLetters&#xff09; 开发语言&#xff1a;C 适合人群&#xff1a;零基础小白或C学习者 软件功能&#xff1a;打字练习软件TL&#xff08;TypeLetters&#…

与队列和栈相关的【OJ题】

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 目录 一、用队列实现栈&#xff1a; 1、2个队列的关联起来怎么由先进先出转变为先进后出&#xff1a;&#xff08;核心&#xff09; 2、认识各个函数干嘛用的&#xff1a; …

【Linux】什么是进程?

一个正在执行的程序&#xff0c;我们称之为进程。 然后我们来顺着一条线来思考。 操作系统底层是用C语言编写的&#xff0c;而我们的进程&#xff0c;它会有各种属性&#xff0c;那么各种属性就可以用一个结构体来对进程的各个属性进行描述&#xff0c;然后这个结构体里面&…

C语言 6 函数

目录 1. 函数的概念 2. 库函数 标准库和头文件 库函数的使用方法 库函数⽂档的一般格式 3. 自定义函数 函数的语法形式 函数的举例 4. 形参和实参 实参 形参 实参和形参的关系 5. return语句 6. 数组做函数参数 7. 嵌套调用和链式访问 嵌套调用 链式访问 8. 函数的声明和定义 单…

Spring MVC分页示例

Spring MVC分页示例 分页用于在不同部分显示大量记录。在这种情况下&#xff0c;我们将在一页中显示10、20或50条记录。对于其余记录&#xff0c;我们提供链接。 我们可以在Spring MVC中简单地创建分页示例。在此分页示例中&#xff0c;我们使用MySQL数据库来获取记录。 创建…

Python爬虫实战:爬取【某旅游交通出行类网站中国内热门景点】的评论数据,使用Re、BeautifulSoup与Xpath三种方式解析数据,代码完整

一、分析爬取网页&#xff1a; 1、网址 https://travel.qunar.com/2、 打开网站&#xff0c;找到要爬取的网页 https://travel.qunar.com/p-cs299979-chongqing进来之后&#xff0c;找到评论界面&#xff0c;如下所示&#xff1a;在这里我选择驴友点评数据爬取点击【驴友点评…

【机器学习】 人工智能和机器学习辅助决策在空战中的未来选择

&#x1f680;传送门 &#x1f680;文章引言&#x1f512;技术层面&#x1f4d5;作战结构&#x1f308;替代决策选项&#x1f3ac;选项 1&#xff1a;超级战争&#xff08;Hyperwar&#xff09;&#x1f320;选项 2&#xff1a;超越OODA&#x1f302;选项 3&#xff1a;阻止其他…

Linux 认识与学习Bash——3

在Linux bash中&#xff0c;数据流重定向是指将命令的输出从默认的标准输出&#xff08;通常是终端&#xff09;重定向到其他位置&#xff0c;如文件或另一个命令的输入。这是通过使用特定的符号来实现的。例如&#xff0c;>用于将输出重定向到文件&#xff0c;而<用于将…

使用 AI Assistant for Observability 和组织的运行手册增强 SRE 故障排除

作者&#xff1a;Almudena Sanz Oliv, Katrin Freihofner, Tom Grabowski 通过本指南&#xff0c;你的 SRE 团队可以实现增强的警报修复和事件管理。 可观测性 AI 助手可帮助用户使用自然语言界面探索和分析可观测性数据&#xff0c;利用自动函数调用来请求、分析和可视化数据…

【35分钟掌握金融风控策略18】贷前风控策略详解-3

目录 ​编辑 贷前风控数据源 第三方数据 贷前风控数据源 第三方数据 在金融风控过程中&#xff0c;金融机构通常会引入一些第三方的风控数据&#xff08;或第三方金融技术&#xff09;来辅助识别贷款个人或贷款企业的风险状况&#xff0c;帮助金融机构进行风控决策&#x…

MySQL·表的内外连接

目录 表的内连和外连 内连接 案例1&#xff1a;显示SMITH的名字和部门名 外连接 左外连接 案例2&#xff1a; 查询所有学生的成绩&#xff0c;如果这个学生没有成绩&#xff0c;也要将学生的个人信息显示出来 右外连接 案例3&#xff1a;对stu表和exam表联合查询&#…

【话题】你用过最好用的AI工具有那些

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景一、C知道二、CSDN工具集三、AI工具的普及与受欢迎程度四、AI工具的实际应用与影响五、总结与展望文章推荐 背景 探讨人们在使用AI工具时&#xff0c;最喜欢的和认…

栈和队列初级题目(包含四个题)

目录 一、原题链接&#xff1a; 二、有效的括号&#xff1a; ​编辑代码实现&#xff1a; 三、用队列实现栈&#xff1a; 四、用栈实现队列&#xff1a; 五、设计循环队列&#xff1a; 六、读书分享&#xff1a; 一、原题链接&#xff1a; 20. 有效的括号 225. 用队列实…