Java实训日记第六天——2023.6.12

news2024/11/20 14:35:04

文章目录

  • 一、MyBatis-Plus
  • 二、将MyBatis-Plus框架整合到SpringBoot
        • 1.导依赖
        • 2.在启动类上开扫描
        • 3.在application.yml中配关于数据库的连接
        • 4.在idea中安装MyBatisX插件
        • 5.在idea中连上MySQL
        • 6.测试查询所有
  • 3.完善增删改查功能
  • 4.逻辑删除
  • 5.自动填充

一、MyBatis-Plus

1.为什么有了MyBatis,还要使用MyBatis-Plus?
MyBatis: 对持久层封装的框架,只需要写接口和SQL语句。
MyBatis-Plus: 大多数持久层的开发量都是单表的增删改查,过于重复和疲劳。它增强了单表的增删改查,我们不再需要定义接口,不再需要定义持久层的映射文件,不再需要写SQL语句。

2.官方文档链接: https://baomidou.com/

二、将MyBatis-Plus框架整合到SpringBoot

1.导依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

2.在启动类上开扫描

到[快速入门----->配置]复制并修改为自己的持久层完整包路径:mapper–>Copy Reference
](https://img-blog.csdnimg.cn/63d49f65340547f6842b00792daf6165.png)

@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")

3.在application.yml中配关于数据库的连接

注意:一定要顶格写,否则会出现层次关系错误导致项目无法启动!
(其中,xxx为数据库名称,用户名和密码根据自己的改)

server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/xxx?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #sql日志打印

4.在idea中安装MyBatisX插件

5.在idea中连上MySQL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自动生成:
在这里插入图片描述
1.实体类
在这里插入图片描述
2.主键的配置
在这里插入图片描述
3.持久层接口
在这里插入图片描述
4.服务层
在这里插入图片描述
5.服务层的实现类
在这里插入图片描述
6.生成resultMap,指定实体类Account和表Account的对应关系
在这里插入图片描述

6.测试查询所有

1.要调用服务层对象,就先注入
在这里插入图片描述
2.调用服务层对象
在这里插入图片描述
3.服务层的接口
在这里插入图片描述
4.生成实现类
在这里插入图片描述
5.在服务层需要持久层对象
报错:
在这里插入图片描述
处理方法一:
在这里插入图片描述

处理方法二:
在接口上注入在这里插入图片描述
+
在这里插入图片描述
6.找文档[CRUD接口–>Mapper CRUD接口]]

@Override
    public List<Account> queryAccounts() {
        List<Account> accounts = accountMapper.selectList(null);
        return accounts;
    }

7.加注解,用Swagger测试
在这里插入图片描述
在这里插入图片描述

3.完善增删改查功能

1.查询:

AccountServiceImpl:
@Override
    public Account login(Account account) {
        //构造查询条件
        LambdaQueryWrapper<Account> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Account::getAccname,account.getAccname());
        wrapper.eq(Account::getAccpass,account.getAccpass());
        Account acc = accountMapper.selectOne(wrapper);
        return acc;
    }


AccountController:
    @GetMapping("/queryAccounts")
    @ApiOperation("列表显示")
    public R queryAccounts(){
        List<Account> accounts =accountService.queryAccounts();
        R r=new R(200,"查询所有成功",accounts);
        return r;
    }

2.增:

AccountServiceImpl:
@Override
    public void saveAccount(Account account) throws BusinessException {
        //判断账号是否重复
        LambdaQueryWrapper<Account> wrapper = new LambdaQueryWrapper();
        wrapper.eq(Account::getAccname,account.getAccname());
        Long count = accountMapper.selectCount(wrapper);
        if(count > 0){
            throw new BusinessException("账号已存在,添加失败");
        }
        //判断邮箱是否重复
        wrapper = new LambdaQueryWrapper();
        wrapper.eq(Account::getAccemail,account.getAccemail());
        count = accountMapper.selectCount(wrapper);
        if(count > 0){
            throw new BusinessException("邮箱已存在,添加失败");
        }
        accountMapper.insert(account);
    }


AccountController:
 @ApiOperation("添加用户信息")
    @PostMapping("/saveAccount")
    public R saveAccount(@Valid  @RequestBody SaveAccountVO accountVO) throws BusinessException {
        Account account = new Account();
        BeanUtils.copyProperties(accountVO,account);
        accountService.saveAccount(account);
        R r=new R(200,"添加成功",null);
        return r;
    }

3.改
在增的基础上,加上判断不等于自己,ne

AccountServiceImpl:
@Override
    public void updateAccount(Account account) throws BusinessException {
        //判断账号是否重复
        LambdaQueryWrapper<Account> wrapper = new LambdaQueryWrapper();
        wrapper.eq(Account::getAccname,account.getAccname());
        wrapper.ne(Account::getAccid,account.getAccid());

        Long count = accountMapper.selectCount(wrapper);
        if(count > 0){
            throw new BusinessException("账号已存在,修改失败");
        }
        //判断邮箱是否重复
        wrapper = new LambdaQueryWrapper();
        wrapper.eq(Account::getAccemail,account.getAccemail());
        wrapper.ne(Account::getAccid,account.getAccid());
        count = accountMapper.selectCount(wrapper);
        if(count > 0){
            throw new BusinessException("邮箱已存在,修改失败");
        }
        accountMapper.updateById(account);
    }


AccountController:
@PutMapping("/updateAccount")
    @ApiOperation("修改用户信息")
    public R abc(@RequestBody  AbcVO vo) throws BusinessException {
        Account account = new Account();
        BeanUtils.copyProperties(vo,account);
        accountService.updateAccount(account);
        R r=new R(200,"修改成功",null);
        return r;
    }

4.删除

AccountServiceImpl:
@Override
    public void deleteAccount(Integer accid) {
        accountMapper.deleteById(accid);
    }


AccountController:
@DeleteMapping("/deleteAccount/{accid}")
    @ApiOperation("根据id删除")
    public R deleteAccount(@PathVariable Integer accid){
        accountService.deleteAccount(accid);
        R r=new R(200,"删除成功",null);
        return r;
    }

4.逻辑删除

表中的数据仍存在,只是状态由0变为1(默认下)。
在这里插入图片描述
在实体类字段上加上@TableLogic注解
在这里插入图片描述
实际上发生的是修改请求,不是删除请求。

5.自动填充

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【手撕MyBatis源码】Configuration配置体系

文章目录 Configuration概述Configuration的核心作用与配置来源配置元素元素承载配置文件解析XML文件解析流程注解配置解析 Configuration概述 Configuration 是整个MyBatis的配置体系集中管理中心&#xff0c;前文所说的Executor、StatementHandler、Cache、MappedStatement……

react---react router 5 基本使用

目录 1.路由介绍 2.路由使用 3.路由组件和一般组件 4.Switch 单一匹配 5.解决二级路由样式丢失的问题 6.路由精准匹配和模糊匹配 1.路由介绍 路由是根据不同的 URL 地址展示不同的内容或页面&#xff0c;在 SPA 应用中&#xff0c;大部分页面结果不改变&#xff0c;只改变…

PostgreSQL 对特定类索引的优化,节省磁盘空间百倍 --BRIN 索引应用在生产案例...

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

为生信写的Python简明教程 | 视频5

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

Pytorch教程:Autograd基础

PyTorch的Autograd特征可以让PyTorch灵活快速的构建机器学习项目。autograd可以实现快速和容易的多重偏微分&#xff08;梯度&#xff09;计算。偏微分计算时反向传播神经网络学习的核心。 autograd的可以在运行时动态追踪计算&#xff0c;这意味着如果模型有决策分支、或者有…

linux 系统服务管理

目录 一、chkconfig 1、列出服务列表 chkconfig --list 2、关闭开启服务 chkconfig 服务名 on/off 3、添加新服务 chkconfig --add 服务文件名 4、删除已有服务 chkconfig --del 服务名 5、系统级别定义&#xff1a; 一、chkconfig chkconfig——centos…

Python学习46:分配学号(python123)

类型&#xff1a;列表元组‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬…

【Java项目】多种方式解决SpringBoot中遇到的控制台中文乱码问题

文章目录 配置JVM参数配置maven参数配置Runner配置Encoding通过配置文件 配置JVM参数 -Dfile.encodingUTF-8配置maven参数 重点就是 <configuration><fork>true</fork><jvmArguments>-Dfile.encodingUTF-8</jvmArguments></configuration>…

Linux常用命令——git命令

在线Linux命令查询工具 git 是目前世界上最先进的分布式版本控制系统 补充说明 git命令很多人都知道&#xff0c;Linus在1991年创建了开源的Linux&#xff0c;从此&#xff0c;Linux系统不断发展&#xff0c;已经成为最大的服务器系统软件了。 Linus虽然创建了Linux&#x…

线程池最佳实践

文章目录 yml参数配置定义参数实体bean配置线程池实战线程池高级理论线程池工作流程概述线程池拒绝策略线程池参数设置原则1&#xff09;如何为线程池设置合适的线程参数&#xff1f;2) 如何获取当前服务器的cpu核数&#xff1f;3) 无界队列问题 yml参数配置 # 定时任务线程池…

Spring高手之路1——深入理解与实现IOC依赖查找与依赖注入

本文从xml开始讲解&#xff0c;注解后面给出 文章目录 1. 一个最基本的 IOC 依赖查找实例2. IOC 的两种实现方式2.1 依赖查找&#xff08;Dependency Lookup&#xff09;2.2 依赖注入&#xff08;Dependency Injection&#xff09; 3. 在三层架构中的 service 层与 dao 层体会依…

Kafka与消息队列的比较

消息队列&#xff08;Message Queues&#xff09;是一种允许分布式系统和应用异步通信的服务。异步通信意味着消息发送者在等待接收者接收消息之前不需要等待&#xff0c;这可以提高性能和可扩展性&#xff0c;使应用能够并行处理消息。消息队列通过将消息存储在队列中来工作。…

【Vue_项目搭建部署】VUE快速入门——部署_安装ele等

检查是否安装 node npm npm -v node -v 全局安装yarn npm install -g yarn 安装完后&#xff0c;可以配置yarn的淘宝镜像 yarn config get registry //查看当前配置的镜像源 //https://registry.yarnpkg.com yarn config set registry http://registry.npm.taobao.or…

【Redis29】Redis进阶:缓存穿透、击穿与雪崩

Redis进阶&#xff1a;缓存穿透、击穿与雪崩 其实啊&#xff0c;这个内容本来不打算写了&#xff0c;网上讲这一块的内容实在是太多了。不过呢&#xff0c;本着学习还是要全面的原则&#xff0c;而且还要让自己多多巩固复习的原则&#xff0c;咱还是来写一道吧。 同样的&#x…

把钢铁侠战衣交给Z世代,没想到联想商用PC可以这么炫酷!

在数字化转型成为全球政企战略性与常态化诉求的今天&#xff0c;没有人会怀疑新一代数字技术和工具的重要性。 千行百业需要拥有全新的工具握力&#xff0c;也带动了商用 PC的市场需求不断被激发&#xff0c;产品升级迭代速度加快&#xff0c;成为PC行业最具发展机遇的市场。 从…

【Python】Python进阶系列教程--Python AI 绘画(二十)

文章目录 前言Windows 环境安装Civitai 介绍 前言 往期回顾&#xff1a; Python进阶系列教程-- Python3 正则表达式&#xff08;一&#xff09;Python进阶系列教程-- Python3 CGI编程&#xff08;二&#xff09;Python进阶系列教程-- Python3 MySQL - mysql-connector 驱动&a…

好几位朋友最近被迫创业!

见字如面&#xff0c;我是军哥&#xff01; 最近好几位朋友被迫创业&#xff0c;有程序员也有之前做业务的朋友&#xff0c;问其原因&#xff0c;都说现在找工作比较难&#xff0c;想想还是自己干吧。 对于这样的回答&#xff0c; 我表示非常的担心&#xff0c;因为风险实在是太…

VMIX如何RTMP推流给灵派编码器

本文链接&#xff1a;https://blog.csdn.net/weixin_45326556/article/details/131181058 第三方设备&#xff08;例如vMix&#xff0c;OBS&#xff09;如何RTMP推流给灵派编码器 1. 灵派编码器内置RTMP-SERVER2. 其他设备RTMP推流给灵派编码器方法3. 如何使用第三方推上来的RT…

Linux---ln命令、date命令

1. 链接命令ln ln&#xff08;link files&#xff09;命令的功能是为某一个文件在另外一个位置建立一个同步的链接。 当需要在不同的目录&#xff0c;用到相同的文件时&#xff0c;不需要在每一个目录下都放一个相同的文件&#xff0c;只需要在 某个固定目录&#xff0c;放上…

以正式员工身份从京东出来,又通过外包回去了,不甘心啊!

人生是一个圈&#xff0c;职场也是一个圈&#xff0c;一位京东员工就以实际行动诠释了这个“圈”&#xff1a; 以正式员工身份从京东出来&#xff0c;又通过外包回去了&#xff0c;不甘心啊&#xff0c;但外面找工作是地狱级难度&#xff01; 网友纷纷表示“笑死”、“有被笑到…