MybatisPlus-入门项目搭建、SQL日志打印、实体类注解、简单持久层操作

news2024/11/19 20:25:12

Mybatis-Plus

mybatis plus概述

​ Mybatis Plus (opens new window)简称 MP,它是一个MyBatis 的增加工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

  • Mybatis Plus官网:https://baomidou.com/

优点:

  • 无侵入
    • 只做增强,不做改变;
    • 引入它不会对现有工程产生影响
  • 损耗小
    • 启动即会自动注入基本 CRUD(增删改查),性能基本无损耗,直接面向对象操作:
  • 强大的 CRUD 操作
    • 内置通用 Mapper、通用 Service
    • 仅仅通过少量配置即可实现单表大部分 CRUD 操作
    • 更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用
    • 通过Lambda表达式,方便的编写各类查询条件,无需再担心字段写错。
  • 支持主键自动生成
    • 支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence)
    • 可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式
    • 支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通操作
    • 支持全局通用方法注入(write once、use anywhere)
  • 内置代码生成器
    • 采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码
    • 支持模板引擎,更有超多自定义配置
  • 内置分页插件
    • 基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库
    • 支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件
    • 可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件
    • 提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

mybatis plus入门

一、项目结构

在这里插入图片描述

二、项目实施

1、创建SpringBoot模板,并导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--依赖父亲maven-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.11</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.etime</groupId>
    <artifactId>day0423</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>day0423</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--在SpringBoot在引入web,由启动器 (starter) 完成-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--引入Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
        <!--数据库相关-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
            <scope>runtime</scope>
        </dependency>
        <!--单元测试相关-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--引入热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!-- 导入Mybatis-Plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
    </dependencies>

    <!--构建插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2、实体类

package com.etime.day0423.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {

    private int sid;
    private String sname;
    private int cid;
}

3、在SpringBoot配置文件application.yml中配置数据库相关信息

server:
  port: 8888
spring:
  devtools:
    restart:
      enabled: true
      additional-exclude: "src/main/java"
      exclude: "static/**"
  datasource:
    username: "root"
    password: "root"
    driver-class-name: "com.mysql.jdbc.Driver"
    url: "jdbc:mysql://localhost:3306/db_418"

4、在数据持久层创建StudentMapper.java接口

package com.etime.day0423.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.etime.day0423.pojo.Student;
import org.springframework.stereotype.Repository;
//
@Repository
/*
    BaseMapper<Student>:继承父接口,并指定类型
 */
public interface StudentMapper extends BaseMapper<Student> {

}

5、创建StudentService.java接口

package com.etime.day0423.service;

import com.etime.day0423.pojo.Student;

import java.util.List;

public interface StudentService {
    List<Student> getAllStudent();
}

6、在业务逻辑层创建接口StudentService.java的实现类并实现方法

package com.etime.day0423.service.impl;

import com.etime.day0423.mapper.StudentMapper;
import com.etime.day0423.pojo.Student;
import com.etime.day0423.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("studentService")
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;
    @Override
    public List<Student> getAllStudent() {
        List<Student> list = studentMapper.selectList(null);
        return list;
    }
}

7、在控制层创建StudentController.java类并编写测试方法

package com.etime.day0423.controller;

import com.etime.day0423.pojo.Student;;
import com.etime.day0423.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class StudentController {
    
    @Autowired
    private StudentService studentService;
    @GetMapping("/student")
    public List<Student> getAllStudent() {
        List<Student> list = studentService.getAllStudent();
        return list;
    }

}

8、在SpringBoot启动类中加入mapper的扫描

package com.etime.day0423;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// 扫描Mapper接口,生成接口实现类的对象
@MapperScan("com.etime.day0423.mapper")
@SpringBootApplication
public class Day0423Application {

    public static void main(String[] args) {
        SpringApplication.run(Day0423Application.class, args);
    }

}

9、测试

在这里插入图片描述

mybatis plus打印SQL

1、在SpringBoot配置文件中,配置日志打印

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2、测试

在这里插入图片描述

mybatis plus用户实体类配置的注解

一、注解介绍

1、@TableName

  • 使用场景:数据库表名与实体类不对应时
  • 描述:该实体类在数据库表中的表名是@TableName中的名字

2、@TableId

  • 使用场景:实体类属性名与数据表的主键名不一致
    • 在mybatis plus中默认作为主键属性名为“id”,不是则用该注解
  • 描述:实体类中属性是作为主键时,@TableId中的名称是数据表的主键名

3、@TableField

  • 使用场景:实体类属性名与数据表的列名不一致
  • 描述:@TableField名称是数据表的列名

二、代码示例

1、实体类

package com.etime.day0423.pojo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("student")
public class Stu {
    @TableId("sid")
    private int stuId;
    @TableField("sname")
    private String stuName;
    @TableField("cid")
    private int classesId;
}

2、测试

在这里插入图片描述

mybatis plus实现增删改查

一、增删改查

1、实体类

  • 注意如果要进行与主键相关的操作,一定要进行实体类的主键属性进行操作
    • mybatis plus中的实体类中默认是主键的属性名是 id,若不是需要使用@TableId注解
package com.etime.day0423.pojo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {

    @TableId("sid")
    private int sid;
    private String sname;
    private int cid;
}

2、在持久层创建接口StudentMapper.java

package com.etime.day0423.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.etime.day0423.pojo.Student;
import org.springframework.stereotype.Repository;
//
@Repository
/*
    BaseMapper<Student>:继承父接口,并指定类型
 */
public interface StudentMapper extends BaseMapper<Student> {

}

3、在业务逻辑层接口StudentService.java中编写方法

package com.etime.day0423.service;

import com.etime.day0423.pojo.Student;

import java.util.List;

public interface StudentService {
    int addStudent(Student student);
    int deleteStudent(int sid);
    int updateStudent(Student student);
    List<Student> getAllStudent();
}

4、在业务逻辑层实现接口StudentService的方法

package com.etime.day0423.controller;

import com.etime.day0423.pojo.Student;;
import com.etime.day0423.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class StudentController {


    @Autowired
    private StudentService studentService;
    @GetMapping("/student")
    public List<Student> getAllStudent() {
        List<Student> list = studentService.getAllStudent();
        return list;
    }

    @PostMapping("/student")
    public boolean addStudent(Student student){
        return studentService.addStudent(student) != 0 ? true:false;
    }

    @DeleteMapping("/student/{sid}")
    public boolean deleteStudent(@PathVariable("sid") int sid){
        return studentService.deleteStudent(sid) != 0 ? true:false;
    }
    @PutMapping("/student")
    public boolean updateStudent(Student student){
        return studentService.updateStudent(student) != 0 ? true:false;
    }

}

二、分页查询

  • 使用MyBatis-Plus内置的分页插件,需要配置相关内容,创建配置类MybatisPlusConfig.java完成配置

1、配置类MybatisPlusConfig.java完成配置

  • 新建一个包叫util,在其中创建MybatisPlusConfig.java
package com.etime.day0423.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;

public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor paginationInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 指定数据库类型为 MySQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

2、在接口StudentService中添加方法

Page<Student> getStudentByPage(int currentPage,int size);

3、为接口StudentService实现类,实现方法

@Override
public Page<Student> getStudentByPage(int currentPage,int size) {
    Page<Student> page = new Page<>(currentPage,size);
    return studentMapper.selectPage(page,null);
}

4、在控制层编写测试方法

@GetMapping("/student/page")
public Page<Student> getStudentByPage(int currentPage,int size){
    return studentService.getStudentByPage(currentPage,size);
}

5、测试

  • 注意控制层方法参数与请求地址中的参数名

在这里插入图片描述

三、条件查询且分页

  • MyBatis-Plus内置的查询器,可以帮助我们来做各种各样的条件查询

在这里插入图片描述

1、在接口StudentService中添加方法

Page<Student> getStudentBySname(String sname, int current, int size);

2、为接口StudentService实现类,实现方法

@Override
public Page<Student> getStudentBySname(String sname, int current, int size) {
    QueryWrapper<Student> wrapper = new QueryWrapper<>();
    wrapper.like("sname",sname);
    Page<Student> page = new Page<>(current,size);
    return studentMapper.selectPage(page,wrapper);
}

3、在控制层编写测试方法

@GetMapping("/student/like")
public Page<Student> getStudentByName(String sname,int currentPage,int size){
    return studentService.getStudentBySname(sname,currentPage,size);
}

4、测试

在这里插入图片描述

mybatis plus前后端分离开发整合

  • 注意记得将Controller加上跨域注解哦

    • @CrossOrigin
      
  • 后端代码在前面我们已经写好,前端只需调用即可。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script src="js/vue.global.js"></script>
    <script src="js/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <form style="width:500px;margin:auto;text-align:center;">
            学生姓名:&nbsp;<input type="text" v-model="sname">&nbsp;
            <input type="button" value="搜索" @click="getStudentBySname(1)">
        </form><br>
        <table border="1" cellspacing="0" cellpadding="0" align="center" width="500">
            <tr>
                <th>学号</th>
                <th>姓名</th>
                <th>班级编号</th>
                <th>操作</th>
            </tr>
            <tr v-for="(stu,index) in students">
                <td>{{stu.sid}}</td>
                <td>{{stu.sname}}</td>
                <td>{{stu.cid}}</td>
                <td>
                    <a href="javaScript:void(0)" @click="deleteStudent(stu.sid)">删除</a>&nbsp;
                    <a href="javaScript:void(0)" @click="updateStudent(stu.sid)">编辑</a>
                </td>
            </tr>
        </table>
        <div style="width: 500px;margin: auto;">
            <a href="javaScript:void(0)" @click="getStudentBySname(1)">首页</a>
            <a href="javaScript:void(0)" @click="getStudentBySname(prePage)">上一页</a>
            {{pageNum}}/{{pageTotal}}
            <a href="javaScript:void(0)" @click="getStudentBySname(nextPage)">下一页</a>
            <a href="javaScript:void(0)" @click="getStudentBySname(pageTotal)">尾页</a>
        </div>
    </div>
    <script>
        const vueApp = Vue.createApp({
             data() {
                return {
                    students:"",
                    pageNum:"",
                    pageTotal:"",
                    prePage:"",
                    nextPage:"",
                    size:3,
                    sname:"",
                }
             },
             methods: {
                getStudentByPage(page){
                    axios({
                        url:"http://localhost:8888/student/page?currentPage="+page+"&size=3",
                        method:"get",
                    }).then(resp =>{
                        console.log(resp.data);
                        this.students = resp.data.records;
                        this.pageNum = resp.data.current;
                        this.pageTotal = resp.data.pages;
                        if(this.pageNum == 1){
                            this.prePage = 1;
                        }else { 
                            this.prePage = this.pageNum - 1;
                        }
                        if(this.nextPage == this.pageTotal){
                            this.nextPage = this.pageTotal;
                        }else {
                            this.nextPage = this.pageNum + 1;
                        }
                    });
                },
                getStudentBySname(page) {
                    console.log("page = "+page);
                    let content = new URLSearchParams();
                    content.append("currentPage", page);
                    content.append("size", this.size);
                    content.append("sname", this.sname);
                    axios({
                        url: "http://localhost:8888/student/like",
                        method: "get",
                        params: content
                    }).then(resp => {
                        console.log(resp.data);
                        this.students = resp.data.records;
                        this.pageNum = resp.data.current;
                        this.pageTotal = resp.data.pages;
                        if(this.pageNum == 1){
                            this.prePage = 1;
                        }else { 
                            this.prePage = this.pageNum - 1;
                        }
                        console.log("prePage = "+this.prePage);
                        if(this.nextPage == this.pageTotal){
                            this.nextPage = this.pageTotal;
                        }else {
                            this.nextPage = this.pageNum + 1;
                        }
                        console.log("nextPage = " + this.nextPage);

                    });
                },
                deleteStudent(sid){
                    if(confirm("确定删除吗?")){
                        axios({
                            url:"http://localhost:8888/student/"+sid,
                            method:"delete",
                        }).then(resp =>{
                            if(resp.data){
                                alert("删除成功");
                                this.getStudentBySname(this.pageNum);
                            }else{
                                alert("删除失败");
                            }
                        });
                    }
                }
             },
             created() {
                this.getStudentByPage(1);
             },
        });
        vueApp.mount("#app");
    </script>
</body>
</html>

在这里插入图片描述

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

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

相关文章

拉格朗日函数对偶问题、KKT条件

一、概念介绍 KKT最优化条件是Karush(1939)以及Kuhn和Tucker(1951)先后独立发表出来的&#xff0c;但在Kuhn和Tucker发表之后才逐渐受到重视&#xff0c;因此多数情况下记载成库恩-塔克条件(Kuhn-Tucker conditions)。先介绍几个优化的概念。 1.1 优化 最优化问题&#xff0…

大彩串口屏新品发布:大彩7寸新品RS485/232双通讯口人机界面发布!

一、产品介绍 新品发布&#xff1a;大彩7寸新品RS485/232双通讯口人机界面发布&#xff01; 此次发布7.0寸外壳HMI产品采用普清800*480液晶屏、触摸选用电阻触摸&#xff0c;硬件性能上与M型医用级组态串口屏一样&#xff0c;软件上拥有炫酷的动画效果&#xff0c;页面切换流…

路侧激光雷达目标检测系统-篇2

本篇文章承接上文&#xff0c;主要阐述代码&#xff0c;分布的成果等工作。识别结果为单帧图片&#xff0c;每一张图片识别完之后&#xff0c;放在一起&#xff0c;就可以连续播放单帧文件&#xff0c;变成视频&#xff0c;或者直接在matlab图窗里面播放。关于这个函数的功能我…

HTML+CSS+JS 学习笔记(三)———Javascript(中)

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;前端 &#x1f331;往期回顾&#xff1a;HTMLCSSJS 学习笔记&#xff08;三&#xff09;———Javascript(上) &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 JavaScrip…

NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_统计语言模型的平滑策略---人工智能工作笔记0035

https://www.cnblogs.com/nickchen121/p/16470569.html#tid-458p3Y 参考这个文档学习 条件概率的链式法则:这个是需要去补充的知识. 首先我们来看一下上一节说到的预训练,可以看到,我们比如有个鹅鸭的分类问题, 这个鹅鸭分类我们是用10万张图片训练的模型,这个已经可以把这个…

3. 马氏决策过程

3. 马氏决策过程 3. 马氏决策过程3.1 马氏过程3.2 马氏奖励过程3.3 马氏决策过程3.4 贝尔曼方程与最优值 3. 马氏决策过程 3.1 马氏过程 3.2 马氏奖励过程 3.3 马氏决策过程 3.4 贝尔曼方程与最优值

如何从有故障的 SD 卡恢复文件

如何从损坏的 SD 卡中恢复文件&#xff1f; 您是否正在与损坏的 SD 卡作斗争&#xff1f;您的 SD 卡上是否有您无法承受的数据丢失&#xff0c;但它没有响应&#xff1f;好吧&#xff0c;我们为您解决了&#xff01; SD 卡是智能手机、相机和笔记本电脑中常用的存储设备。虽然…

2. 多臂老虎机问题

多臂老虎机问题 2. 多臂老虎机问题2.1 强化学习基本概念2.2 多臂老虎机与regret值2.3 随机多臂老虎机2.4 对抗多臂老虎机2.5 上下文多臂老虎机2. 多臂老虎机问题 2.1 强化学习基本概念 2.2 多臂老虎机与regret值

SpringCloud入门实战(七)-Hystrix入门简介

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术&#xff0c;都可以先去官网先看看&…

图像基本运算

图像基本运算 图像算数运算: 1)图像加法 示例代码&#xff1a; import cv2 import numpy as np img1 cv2.imread(‘…/datas/fengjing1.png’)#(546, 820, 3) img2 cv2.imread(‘…/datas/logo.png’)#(512, 512, 3) print(img1.shape) img1resize cv2.resize(img1, (24…

4.微服务项目实战---Sentinel--服务容错

4.1 高并发带来的问题 在微服务架构中&#xff0c;我们将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络 原因或者自身的原因&#xff0c;服务并不能保证服务的 100% 可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务…

活动报名|X-DecoderSEEM:从开放词库的图像理解到像素分割,如何用一个模型做N个任务理解M个模态...

2023年04月27日&#xff08;星期四&#xff09;11:00-12:00&#xff0c;由智源社区主办的「智源LIVE 第39期线上活动&#xff1a;X-Decoder&SEEM&#xff1a;从开放词库的图像理解到像素分割&#xff0c;如何用一个模型做N个任务理解M个模态本期活动将在线举办&#xff0c;…

echarts 环形图占比_环形图_仪表盘

Echarts 常用各类图表模板配置 注意&#xff1a; 这里主要就是基于各类图表&#xff0c;更多的使用 Echarts 的各类配置项&#xff1b; 以下代码都可以复制到 Echarts 官网&#xff0c;直接预览&#xff1b; 图标模板目录 Echarts 常用各类图表模板配置一、环形图占比二、环形…

ACT-1,才是你更想要的人工智能助手

2022年开年以来&#xff0c;人工智能发展迅速&#xff0c;Transformers 的广泛应用使得语言、代码和图像生成等领域取得了巨大进展。在这个背景下&#xff0c;Adept 公司推出了第一个大型模型 Action Transformer (ACT-1)&#xff0c;构建一个能在数字世界中采取行动的模型。 该…

〖ChatGPT实践指南 - 零基础扫盲篇①〗- ChatGPT简介、应用领域 及 哪些人应该为ChatGPT 的出现感到恐惧

文章目录 ⭐ 什么是 ChatGPT⭐ OpenAI 团队⭐ 详解 ChatGPT 聊天机器人⭐ ChatGPT的应用领域⭐ 作为程序员应该为 ChatGPT 的出现感到恐惧吗 有感于最近 ChatGPT 大火的原因&#xff0c;我这低眉顺眼的XXX也开始来蹭热度了。没办法&#xff0c;这玩意儿的热度太火了&#xff0c…

华为OD机试真题(Java),字符串加解密(100%通过+复盘思路)

一、题目描述 对输入的字符串进行加解密&#xff0c;并输出。 加密方法为&#xff1a; 当内容是英文字母时则用该英文字母的后一个字母替换&#xff0c;同时字母变换大小写,如字母a时则替换为B&#xff1b;字母Z时则替换为a&#xff1b; 当内容是数字时则把该数字加1&#…

JAVAweb开发学习

六、MybatisPlus快速上手 数据库操作 注意&#xff01;注意&#xff01;注意&#xff01;springboot版本选择2.7.2 1.ORM介绍&#xff08;对象关系映射&#xff09; 既包含存储&#xff0c;又包含映射。将java类映射到数据库 2.MybatisPlus介绍 ORM框架 数据库操作来啦…

MySQL: 更改(删除)表名和字段

目录 自动添加表的属性&#xff1a; 更改表名和字段&#xff1a; 更改表名&#xff1a; 更改字段数据类型&#xff1a; 修改字段名&#xff1a; 添加字段&#xff1a; 删除字段&#xff1a; 修改字段排列位置&#xff1a; ​编辑 删除表的外键约束&#xff1a; 删除表&…

4月20日作业

#include <iostream> #include <cstring> using namespace std; //定义类 class myString { private: char *str; int size; public: //无参构造 myString():size(32) { str new char[size]; cout << "无参构造" << endl; } //有…

低代码开发重要工具:jvs-logic(逻辑引擎)能力扩展及代码集成

逻辑引擎动态加载执行 介绍下逻辑引擎如何实现配置规则的动态加载 逻辑引擎的规则动态加载是指在逻辑引擎运行时&#xff0c;可以根据特定的条件或触发事件&#xff0c;动态地加载或卸载规则的功能。这种功能可以帮助用户根据不同的业务需求或运行环境&#xff0c;快速调整或…