springboot3 + mybatis-plus3 创建web项目实现表增删改查
Idea创建项目
环境配置说明
在现代化的企业级应用开发中,合适的开发环境配置能够极大提升开发效率和应用性能。本文介绍的环境配置为:
- 操作系统:Windows 11
- JDK:JDK 21
- Maven:Maven 3.9.x
- IDE:IntelliJ IDEA 2024.x
- 数据库:MySQL 8.x
使用的核心框架和工具版本为:
- Spring Boot:3.4.5
- MyBatis-Plus:3.5.12
- Lombok:简化代码的自动化工具
这个配置组合为开发者提供了一个强大且现代化的基础,适用于构建高效、可扩展的企业级应用。具体而言:
-
Spring Boot 3.4.5:作为 Java 开发的主流框架,Spring Boot 提供了更加简洁、易于维护的开发体验。它集成了大量开箱即用的功能,简化了开发流程,极大提高了开发效率。
-
MyBatis-Plus 3.5.12:基于 MyBatis 的增强工具,MyBatis-Plus 在保持 MyBatis 灵活性的同时,提供了更多强大的功能,如自动生成 CRUD 操作,分页查询等,极大减少了重复代码量。通过这一工具,开发者可以更加专注于业务逻辑的实现,而不必为数据库操作编写大量冗余的代码。
-
Lombok:通过简单的注解,Lombok 可以自动生成 getter、setter、构造函数、toString 方法等,极大地简化了实体类的编写。它不仅节省了代码量,也使得代码更加清晰和易读。
进入下一个页面后勾选我们需要的依赖
选好之后点击create创建项目
选择项目打开的方式“选择新窗口”
Idea创建项目完成之后这个样子
去mybatisplus官网复制依赖到pom.xml文件
mybatisplus
官网 https://baomidou.com/getting-started/
复制依赖进入pom.xml,点击maven刷新等待
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.12</version>
</dependency>
完整的
pom
如下:
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.gt.demo</groupId><artifactId>sm3</artifactId><version>0.0.1-SNAPSHOT</version><name>sm3</name><description>Spring Boot 3 和 MyBatis-Plus 3 的结合让你能够快速构建基于 Java 的企业级应用,简化了数据库操作,并减少了繁琐的配置和代码量。Spring Boot 提供了一个轻量级、快速的开发环境,而 MyBatis-Plus 则进一步简化了与数据库交互的部分,提供了便捷的功能,适合开发现代化的企业应用程序。</description><properties><java.version>21</java.version><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><mysql.version>8.0.33</mysql.version><lombok.version>1.18.36</lombok.version><mybatis-plus.version>3.5.12</mybatis-plus.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><optional>true</optional></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
解释Springboot+Mybatisplus能做什么
Spring Boot 3 和 MyBatis-Plus 3 是两个常用的 Java 开发框架,它们结合使用时可以让开发者更加高效地构建企业级应用程序。
1. Spring Boot 3
Spring Boot 是一个开源的 Java 框架,旨在简化 Spring 应用程序的设置和开发。Spring Boot 3 是 Spring Framework 5 的基础上进一步优化和增强的版本,它提供了一些现代化的功能和特性。主要特点包括:
- 快速开发:Spring Boot 提供了大量的默认配置,可以省去繁琐的配置工作,帮助开发者快速启动项目。
- 内嵌服务器:Spring Boot 集成了嵌入式服务器(如 Tomcat、Jetty),无需外部应用服务器,简化了部署流程。
- 自动配置:Spring Boot 会自动配置应用程序,减少了开发者手动配置的工作量。
- 微服务架构支持:Spring Boot 与 Spring Cloud 一起,可以帮助开发微服务架构。
2. MyBatis-Plus 3
MyBatis-Plus 是 MyBatis 的增强版,提供了更多的功能,旨在简化 MyBatis 的使用。MyBatis 是一个持久层框架,它通过映射文件将 Java 对象与数据库中的记录进行映射。MyBatis-Plus 通过提供一系列常用功能,减少了开发者编写重复代码的时间。MyBatis-Plus 3 是该框架的一个版本,具备以下特性:
- 无侵入设计:MyBatis-Plus 不需要修改现有的 MyBatis 配置,可以平滑地集成到现有项目中。
- 增强 CRUD 操作:MyBatis-Plus 提供了
BaseMapper
接口,支持自动生成常见的增、删、改、查操作,减少了大量重复代码。 - 条件构造器:提供了灵活且简洁的条件构造器,可以方便地进行复杂的查询操作。
- 分页插件:MyBatis-Plus 提供了自动分页功能,减少了分页查询的代码量。
- 代码生成器:MyBatis-Plus 提供了代码生成器,可以快速生成实体类、Mapper 接口、XML 配置等代码。
3. Spring Boot 3 + MyBatis-Plus 3 一起使用的优势
当 Spring Boot 和 MyBatis-Plus 结合使用时,开发者可以获得以下几方面的好处:
(1)快速开发与配置
- Spring Boot 提供了自动配置和约定优于配置的机制,而 MyBatis-Plus 又能自动处理常见的数据库操作。
- 开发者只需定义基本的
Entity
类和Mapper
接口,剩下的增、删、改、查操作都可以由 MyBatis-Plus 自动处理,极大地提高了开发效率。
(2)简化数据库操作
- 使用 MyBatis-Plus 的
BaseMapper
,开发者只需简单地继承该接口,就能获得对数据库表的基本操作(如增、删、改、查)的支持。 - 无需编写复杂的 SQL 语句,MyBatis-Plus 提供了丰富的查询构造器,方便进行复杂查询的构建。
(3)自动分页
- MyBatis-Plus 提供了分页插件,结合 Spring Boot 自动配置,可以快速实现数据库查询结果的分页功能。
- 通过简单配置,分页功能开箱即用,无需额外的代码编写。
(4)易于集成
- Spring Boot 提供了非常便捷的集成方式,MyBatis-Plus 也支持与 Spring Boot 的无缝集成。只需在
application.properties
或application.yml
文件中做简单配置,MyBatis-Plus 就可以与 Spring Boot 配合使用。
(5)提高维护性
- 使用 MyBatis-Plus 时,开发者不再需要编写大量重复的 SQL 语句和 XML 映射文件,这使得项目的代码更加简洁,易于维护。
- Spring Boot 的配置和管理也大大简化了项目结构,方便对项目进行扩展和维护。
4. 实际应用场景
当你用 Spring Boot 3 + MyBatis-Plus 3 来开发项目时,你的应用可以做到以下几个功能:
- 数据持久化:通过 MyBatis-Plus 简化数据操作。
- 快速开发:Spring Boot 提供的自动配置和快速启动特性可以帮助你快速搭建应用程序。
- 微服务支持:与 Spring Cloud 配合使用,可以帮助你构建微服务架构。
- 数据库操作优化:MyBatis-Plus 的分页插件和条件构造器可以高效地进行数据库查询和分页。
配置MySQL数据库信息和Mybatisplus的信息
# 应用名称配置
spring.application.name=sm3# MySQL数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/test_admin_123?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.username=guotong
spring.datasource.password=123456
spring.datasource.hikari.maximum-pool-size=5 # 设置最大连接池大小# MyBatis配置
# mapper.xml 文件位置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# 实体类所在包路径
mybatis-plus.type-aliases-package=com.example.entity
# 配置MyBatis-Plus的SQL日志实现
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
# 启用下划线转驼峰命名规则
mybatis-plus.configuration.map-underscore-to-camel-case=true# 逻辑删除配置
# 设置逻辑删除字段的值(非删除状态)
mybatis-plus.global-config.db-config.logic-not-delete-value=0
# 设置逻辑删除字段名
mybatis-plus.global-config.db-config.logic-delete-field=isDel
# 设置逻辑删除的值(表示已删除)
mybatis-plus.global-config.db-config.logic-delete-value=2
代码结构
1.实体类:com.gt.demo.sm3.domain.SysUser.java
package com.gt.demo.sm3.domain;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serial;
import java.io.Serializable;
import java.util.Date;/*** 用户信息表(SysUser)表实体类** @author makejava* @since 2025-05-09 17:08:15*/
@Data
@Accessors(chain = true)
@TableName(value = "sys_user", autoResultMap = true)
public class SysUser implements Serializable {@Serialprivate static final long serialVersionUID = 1L;/*** 用户ID*/@TableField(value = "user_id")@TableId(value = "user_id", type = IdType.ASSIGN_ID)private Long userId;/*** 租户编号*/@TableField(value = "tenant_id")private String tenantId;/*** 部门ID*/@TableField(value = "dept_id")private Long deptId;/*** 用户账号*/@TableField(value = "user_name")private String userName;/*** 用户昵称*/@TableField(value = "nick_name")private String nickName;/*** 用户类型(sys_user系统用户)*/@TableField(value = "user_type")private String userType;/*** 用户邮箱*/@TableField(value = "email")private String email;/*** 手机号码*/@TableField(value = "phone_number")private String phoneNumber;/*** 用户性别(0男 1女 2未知)*/@TableField(value = "sex")private String sex;/*** 头像地址*/@TableField(value = "avatar")private Long avatar;/*** 密码*/@TableField(value = "password")private String password;/*** 帐号状态(0正常 1停用)*/@TableField(value = "status")private String status;/*** 删除标志(0代表存在 2代表删除)*/@TableField(value = "del_flag")private String delFlag;/*** 最后登录IP*/@TableField(value = "login_ip")private String loginIp;/*** 最后登录时间*/@TableField(value = "login_date")private Date loginDate;/*** 创建部门*/@TableField(value = "create_dept")private Long createDept;/*** 创建者*/@TableField(value = "create_by")private Long createBy;/*** 创建时间*/@TableField(value = "create_time", fill = FieldFill.INSERT)private Date createTime;/*** 更新者*/@TableField(value = "update_by")private Long updateBy;/*** 更新时间*/@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)private Date updateTime;/*** 备注*/@TableField(value = "remark")private String remark;
}
2.Mapper接口:com.gt.demo.sm3.mapper.SysUserMapper.java
package com.gt.demo.sm3.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gt.demo.sm3.domain.SysUser;
import org.apache.ibatis.annotations.Mapper;import java.util.List;
/*** 用户信息表(SysUser)表数据库访问层** @author makejava* @since 2025-05-09 17:08:15*/
@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {Integer insertBatch(List<SysUser> entityList);
}
3.Service业务接口:com.gt.demo.sm3.service.SysUserService.java
package com.gt.demo.sm3.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.gt.demo.sm3.domain.SysUser;import java.util.List;/*** 用户信息表(SysUser)表服务接口** @author makejava* @since 2025-05-09 17:08:15*/
public interface SysUserService extends IService<SysUser> {/*** Description: 批量新增** @param entityList* @author: GuoTong* @since: 2025-05-09 17:08:15*/Integer saveBatchByEasyBaseMapper(List<SysUser> entityList);
}
4.Service业务接口实现:com.gt.demo.sm3.service.impl.SysUserServiceImpl.java
package com.gt.demo.sm3.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gt.demo.sm3.domain.SysUser;
import com.gt.demo.sm3.mapper.SysUserMapper;
import com.gt.demo.sm3.service.SysUserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;import java.util.List;/*** 用户信息表(SysUser)表服务实现类** @author makejava* @since 2025-05-09 17:08:15*/
@Service("sysUserService")
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {@Resourceprivate SysUserMapper sysUserMapper;/*** Description: 批量新增优化版*/@Overridepublic Integer saveBatchByEasyBaseMapper(List<SysUser> entityList) {return sysUserMapper.insertBatch(entityList);}}
5.Controller:com.gt.demo.sm3.controller.SysUserController.java
package com.gt.demo.sm3.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gt.demo.sm3.domain.SysUser;
import com.gt.demo.sm3.service.SysUserService;
import com.gt.demo.sm3.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.io.Serializable;
import java.util.Arrays;
import java.util.List;/*** 用户信息表(SysUser)表控制层** @author makejava* @since 2025-05-09 17:08:15*/
@RestController
@RequestMapping("sysUser")
public class SysUserController {/*** 服务对象*/@Autowiredprivate SysUserService sysUserService;/*** 分页查询数据** @param sysUser 查询实体* @return 所有数据*/@PostMapping("/queryLimit")public R<Object> queryPage(@RequestParam long pageIndex, @RequestParam long pageSize, @RequestBody SysUser sysUser) {// 分页查询Page<SysUser> sysUserPage = new Page<>(pageIndex, pageSize);LambdaQueryWrapper<SysUser> wrapper = Wrappers.lambdaQuery(SysUser.class).like(StringUtils.isNotBlank(sysUser.getUserName()), SysUser::getUserName, sysUser.getUserName());IPage<SysUser> page = this.sysUserService.page(sysUserPage, wrapper);// 封装返回结果集return R.ok(page.getRecords());}/*** 通过主键查询单条数据** @param id 主键* @return 单条数据*/@GetMapping("/queryOne/{id}")public R<SysUser> selectOne(@PathVariable("id") Serializable id) {return R.ok(this.sysUserService.getById(id));}/*** 新增数据** @param sysUser 实体对象* @return 新增结果*/@PostMapping("/save")public R<String> insert(@RequestBody SysUser sysUser) {boolean save = this.sysUserService.save(sysUser);String executeMsg = "新增操作,id 是:" + sysUser.getUserId();return save ? R.ok(executeMsg) : R.fail(executeMsg);}/*** 批量新增数据** @param sysUserList 实体对象* @return 新增结果*/@PostMapping("/saveBatch")public R<String> insertBatch(@RequestBody List<SysUser> sysUserList) {Integer save = this.sysUserService.saveBatchByEasyBaseMapper(sysUserList);String executeMsg = "新增操作=>id 是:" + Arrays.toString(sysUserList.stream().map(SysUser::getUserId).toArray());return save > 0 ? R.ok(executeMsg) : R.fail(executeMsg);}/*** 修改数据** @param sysUser 实体对象* @return 修改结果*/@PutMapping("/update")public R<String> update(@RequestBody SysUser sysUser) {boolean update = this.sysUserService.updateById(sysUser);String executeMsg = "修改操作,id 是:" + sysUser.getUserId();return update ? R.ok(executeMsg) : R.fail(executeMsg);}/*** 删除数据** @param idList 主键结合* @return 删除结果*/@DeleteMapping("/dels")public R<String> delete(@RequestParam("idList") List<Long> idList) {boolean delNumber = this.sysUserService.removeByIds(idList);String executeMsg = "删除操作,ids 是:" + idList;return delNumber ? R.ok(executeMsg) : R.fail(executeMsg);}
}
6.启动类:com.gt.demo.sm3.Sm3Application.java
package com.gt.demo.sm3;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author makeJava*/
@SpringBootApplication
@MapperScan("com.gt.demo.sm3.mapper")
public class Sm3Application {public static void main(String[] args) {SpringApplication.run(Sm3Application.class, args);}}
运行
测试接口
接口地址
http://localhost:8080/sysUser/queryOne/1
响应结果
{"code": 200,"msg": "操作成功","total": 0,"data": {"userId": 1,"tenantId": "000000","deptId": 103,"userName": "admin","nickName": "白嫖老郭","userType": "sys_user","email": "crazyLionLi@163.com","phoneNumber": "15888888888","sex": "1","avatar": null,"password": "21232f297a57a5a743894a0e4a801fc3","status": "1","delFlag": "0","loginIp": "0:0:0:0:0:0:0:1","loginDate": "2024-11-26T07:20:32.000+00:00","createDept": 103,"createBy": 1,"createTime": "2024-11-12T11:33:19.000+00:00","updateBy": 1,"updateTime": "2024-11-26T07:20:32.000+00:00","remark": "管理员"}
}
测试数据库
CREATE TABLE `sys_user` (`user_id` bigint NOT NULL COMMENT '用户ID',`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',`dept_id` bigint DEFAULT NULL COMMENT '部门ID',`user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号',`nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称',`user_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'sys_user' COMMENT '用户类型(sys_user系统用户)',`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户邮箱',`phone_number` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '手机号码',`sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',`avatar` bigint DEFAULT NULL COMMENT '头像地址',`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '密码',`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',`login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '最后登录IP',`login_date` datetime DEFAULT NULL COMMENT '最后登录时间',`create_dept` bigint DEFAULT NULL COMMENT '创建部门',`create_by` bigint DEFAULT NULL COMMENT '创建者',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_by` bigint DEFAULT NULL COMMENT '更新者',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户信息表';INSERT INTO `test_admin_123`.`sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phone_number`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '000000', 103, 'admin', '白嫖老郭', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', NULL, '21232f297a57a5a743894a0e4a801fc3', '1', '0', '0:0:0:0:0:0:0:1', '2024-11-26 15:20:32', 103, 1, '2024-11-12 19:33:19', 1, '2024-11-26 15:20:32', '管理员');
INSERT INTO `test_admin_123`.`sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phone_number`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '000000', 108, 'test', '本部门及以下 密码666666', 'sys_user', '', '', '0', NULL, 'f379eaf3c831b04de153469d1bec345e', '0', '0', '127.0.0.1', '2024-11-12 19:33:19', 103, 1, '2024-11-12 19:33:19', 3, '2024-11-12 19:33:19', NULL);
INSERT INTO `test_admin_123`.`sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phone_number`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, '000000', 102, 'test1', '仅本人 密码666666', 'sys_user', '', '', '0', NULL, 'f379eaf3c831b04de153469d1bec345e', '0', '0', '127.0.0.1', '2024-11-12 19:33:19', 103, 1, '2024-11-12 19:33:19', 4, '2024-11-12 19:33:19', NULL);
Over
相关文章:
springboot3 + mybatis-plus3 创建web项目实现表增删改查
Idea创建项目 环境配置说明 在现代化的企业级应用开发中,合适的开发环境配置能够极大提升开发效率和应用性能。本文介绍的环境配置为: 操作系统:Windows 11JDK:JDK 21Maven:Maven 3.9.xIDE:IntelliJ IDEA…...
多模型协同预测在风机故障预测的应用(demo)
数据加载和预处理的真实性: 下面的代码中,DummyDataset 和数据加载部分仍然是高度简化和占位的。为了让这个训练循环真正有效,您必须用您自己的数据加载逻辑替换它。这意味着您需要创建一个 torch.utils.data.Dataset 的子类,它能…...
韩媒聚焦Lazarus攻击手段升级,CertiK联创顾荣辉详解应对之道
近日,韩国知名科技媒体《韩国IT时报》(Korea IT Times)刊文引述了CertiK联合创始人兼CEO顾荣辉教授的专业见解,聚焦黑客组织Lazarus在Web3.0领域攻击手段的持续升级,分析这一威胁的严峻性,并探讨了提升行业…...
5.9-selcct_poll_epoll 和 reactor 的模拟实现
5.9-select_poll_epoll 本文演示 select 等 io 多路复用函数的应用方法,函数具体介绍可以参考我过去写的博客。 先绑定监听的文件描述符 int sockfd socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serveraddr; memset(&serveraddr, 0, sizeof(struc…...
图上思维:基于知识图的大型语言模型的深层可靠推理
摘要 尽管大型语言模型(LLM)在各种任务中取得了巨大的成功,但它们经常与幻觉问题作斗争,特别是在需要深入和负责任的推理的场景中。这些问题可以通过在LLM推理中引入外部知识图(KG)来部分解决。在本文中&am…...
37-智慧医疗服务平台(在线接诊/问诊)
系统功能特点: 技术栈: springBootVueMysql 功能点: 医生端 用户端 管理员端 医生端: 科室信息管理、在线挂号管理、预约体检管理、体检报告管理、药品信息管理、处方信息管理、缴费信息管理、病历信息管理、智能导诊管理、在线接诊患者功能 (和患者1V1沟通) 用户…...
【新品发布】VXI可重构信号处理系统模块系列
VXI可重构信号处理系统模块概述 VXI可重构信号处理系统模块包括了 GPU 模块,CPU 模块,射频模块、IO 模块、DSP模块、高速存储模块、交换模块,采集处理模块、回放处理模块等,全套组件为单体3U VPX架构,可自由组合到多槽…...
React 第三十八节 Router 中useRoutes 的使用详解及注意事项
前言 useRoutes 是 React Router v6 引入的一个钩子函数,允许通过 JavaScript 对象(而非传统的 JSX 语法)定义路由配置。这种方式更适合复杂路由结构,且代码更简洁易维护。 一、基础使用 1.1、useRoutes路由配置对象 useRoute…...
Redhat 系统详解
Red Hat 系统深度解析:从企业级架构到核心组件 一、Red Hat 概述:企业级 Linux 的标杆 Red Hat 是全球领先的开源解决方案供应商,其核心产品 Red Hat Enterprise Linux(RHEL) 是企业级 Linux 的黄金标准。RHEL 以 稳…...
docker常用命令总结
常用命令含义docker info查看docker 服务的信息-------------------------镜像篇docker pull XXX从官网上拉取名为XXX的镜像docker login -u name登录自己的dockerhub账号docker push XXX将XXX镜像上传到自己的dockerhub账户中(XXX的命名必须是用户名/镜像名&#x…...
【el-admin】el-admin关联数据字典
数据字典使用 一、新增数据字典1、新增【图书状态】和【图书类型】数据字典2、编辑字典值 二、代码生成配置1、表单设置2、关联字典3、验证关联数据字典 三、查询操作1、模糊查询2、按类别查询(下拉框) 四、数据校验 一、新增数据字典 1、新增【图书状态…...
component :is是什么?
问: component :is是什么? 是组件? 那我们是不是就不需要自己创建组件了?还是什么意思?component :is和什么功能是类似的,同时和类似功能相比对什么时候用component :is…...
适老化洗浴辅具产业:在技术迭代与需求升级中重塑银发经济新生态
随着中国人口老龄化程度的不断加深,老年群体对于适老化产品的需求日益增长。 适老化洗浴辅具作为保障老年人洗浴安全与舒适的关键产品,其发展状况备受关注。 深入剖析中国适老化洗浴辅具的发展现状,并探寻助力产业发展的有效路径࿰…...
『Python学习笔记』ubuntu解决matplotlit中文乱码的问题!
ubuntu解决matplotlit中文乱码的问题! 文章目录 simhei.ttf字体下载链接:http://xiazaiziti.com/210356.html将字体放到合适的地方 sudo cp SimHei.ttf /usr/share/fonts/(base) zkfzkf:~$ fc-list | grep -i "SimHei" /usr/local/share/font…...
从AI到新能源:猎板PCB的HDI技术如何定义高端制造新标准?
2025年,随着AI服务器、新能源汽车、折叠屏设备等新兴领域的爆发式增长,高密度互连(HDI)电路板成为电子制造业的“必争之地”。HDI板凭借微孔、细线宽和高层间对位精度,能够实现电子设备的高集成化与微型化,…...
汽车制造行业的数字化转型
嘿,大家好!今天来和大家聊聊汽车制造行业的数字化转型,这可是当下非常热门的话题哦! 随着科技的飞速发展,传统的汽车制造行业正经历着一场深刻的变革。数字化技术已经不再是“锦上添花”,而是车企能否在未…...
Redis 常见数据类型
Redis 常见数据类型 一、基本全局命令详解与实操 1. KEYS 命令 功能:按模式匹配返回所有符合条件的键(生产环境慎用,可能导致阻塞)。 语法: KEYS pattern 模式规则: h?llo:匹配 hello, ha…...
【计算机网络-传输层】传输层协议-TCP核心机制与可靠性保障
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:传输层协议-UDP 下篇文章: 网络层 我们的讲解顺序是&…...
对golang中CSP的理解
概念: CSP模型,即通信顺序进程模型,是由英国计算机科学家C.A.R. Hoare于1978年提出的。该模型强调进程之间通过通道(channel)进行通信,并通过消息传递来协调并发执行的进程。CSP模型的核心思想是“不要通过…...
嵌入式openharmony标准系统中HDF框架底层原理分析
1、案例简介 该程序是基于OpenHarmony标准系统编写的基础外设类:简易HDF驱动。 2、基础知识 2.1、OpenHarmony HDF开发简介 HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。旨在构建统一…...
238.除自身以外数组的乘积
给你一个数组,求出第 i 个元素以外的数组元素的乘积,不能使用除法,且时间复杂度O(n), 对于一个数,如果知道了前缀元素的乘积和后缀元素的乘积,就知道了这个元素以外的数组元素的乘积,所以现在的问题是如何…...
AI文旅|暴雨打造旅游新体验
今年"五一"假期,全国文旅市场迎来爆发式增长,从丈崖瀑布的磅礴水雾到城市商区的璀璨霓虹,从山野民宿的静谧悠然到主题乐园的欢腾喧嚣,处处人潮涌动。在这火热的景象背后,一股“无形之力”正悄然改变旅游体验…...
学习心得《How Global AI Policy and Regulations Will Impact Your Enterprise》Gartner
AI时代来临,然而与之对应的是海量的数据的安全性和合规性如何保障,如何平衡个人与智能体的利益,恰巧,最近Gartner发布了《How Global AI Policy and Regulations Will Impact Your Enterprise》,我们就其中的观点一起进行探讨。 战略规划假设 我们首先关注的是关键的战略…...
JAVA将一个同步方法改为异步执行
目的: 这么做的目的就是为了使一个高频率执行的方法能不阻塞整个程序,将该方法丢入到线程池中让线程去做异步执行,既提高了程序整体运行速度,也使得在高并发环境下程序能够更加健壮(同步执行可能会使得请求堆积以致系…...
对遗传算法思想的理解与实例详解
目录 一、概述 二、实例详解 1)问题描述与分析 2)初始化种群 3)计算种群适应度 4)遗传操作 5)基因交叉操作 6)变异操作 三、计算结果 四、总结 一、概述 遗传算法在求解最优解的问题中最为常用&a…...
数据可视化大屏——物流大数据服务平台(二)
代码分析: 物流大数据平台代码分析 这是一个基于 Bootstrap 和 ECharts 构建的物流大数据平台前端页面,设计采用了经典的三栏布局,主要展示河南省及全国的物流数据可视化内容。下面从多个维度进行分析: 1. 页面结构分析 整体采…...
MindSpore框架学习项目-ResNet药物分类-构建模型
目录 2.构建模型 2.1定义模型类 2.1.1 基础块ResidualBlockBase ResidualBlockBase代码解析 2.1.2 瓶颈块ResidualBlock ResidualBlock代码解释 2.1.3 构建层 构建层代码说明 2.1.4 定义不同组合(block,layer_nums)的ResNet网络实现 ResNet组建类代码解析…...
ChatTempMail - AI驱动的免费临时邮箱服务
在当今数字世界中,保护在线隐私的需求日益增长。ChatTempMail应运而生,作为一款融合人工智能技术的新一代临时邮箱服务,它不仅提供传统临时邮箱的基本功能,还通过AI技术大幅提升了用户体验。 核心功能与特性 1. AI驱动的智能邮件…...
(leetcode) 力扣100 9.找到字符串中所有字母异位词(滑动窗口)
题目 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 数据范围 1 < s.length, p.length < 3 * 104 s 和 p 仅包含小写字母 样例 示例 1: 输入: s "cbaebabacd", p &quo…...
深入了解 Stable Diffusion:AI 图像生成的奥秘
一、引言 AI 艺术与图像生成技术的兴起改变了我们创造和体验视觉内容的方式。在过去几年里,深度学习模型已经能够创造出令人惊叹的艺术作品,这些作品不仅模仿了人类艺术家的风格,甚至还能创造出前所未有的新风格。在这个领域,Sta…...
场外期权平值期权 实值期权 虚值期权有什么区别?收益如何计算?
期权汇 场外期权按价值状态分为平值、虚值、实值期权。 01|实值期权对于看涨期权而言,如果行权价格低于标的市场价格,则该期权处于实值状态;对于看跌期权,如果行权价格高于标的市场价格,则处于实值状态…...
微软系统 红帽系统 网络故障排查:ping、traceroute、netstat
在微软(Windows)和红帽(Red Hat Enterprise Linux,RHEL)等系统中,网络故障排查是确保系统正常运行的重要环节。 ping、traceroute(在Windows中为tracert)和netstat是三个常用的网络…...
HOT 100 | 【子串】76.最小覆盖子串、【普通数组】53.最大子数组和、【普通数组】56.合并区间
一、【子串】76.最小覆盖子串 1. 解题思路 定义两个哈希表分别用于 t 统计字符串 t 的字符个数,另一个sub_s用于统计字符串 t 在 s 的子串里面字符出现的频率。 为了降低时间复杂度,定义一个变量t_count用于统计 t 哈希表中元素的个数。哈希表sub_s是一…...
基于CNN的猫狗图像分类系统
一、系统概述 本系统是基于PyTorch框架构建的智能图像分类系统,专门针对CIFAR-10数据集中的猫(类别3)和狗(类别5)进行分类任务。系统采用卷积神经网络(CNN)作为核心算法,结合图形用…...
《时序数据库全球格局:国产与国外主流方案的对比分析》
引言 时序数据库(Time Series Database, TSDB)是专门用于存储、查询和分析时间序列数据的数据库系统,广泛应用于物联网(IoT)、金融、工业监控、智能运维等领域。近年来,随着大数据和物联网技术的发展&…...
力扣-2.两数相加
题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都…...
富乐德传感技术盘古信息 | 锚定“未来工厂”新坐标,开启传感器制造行业数字化转型新征程
在数字化浪潮下,制造业正经历深刻变革。 传感器作为智能制造的核心基础部件,正面临着质量精度要求升级、交付周期缩短、成本管控严苛等多重挑战。传统依赖人工纸质管理、设备数据孤岛化的生产模式,已成为制约高端传感器制造突破“高精度、高…...
RT-Thread 深入系列 Part 2:RT-Thread 内核核心机制深度剖析
摘要: 本文从线程管理、调度器原理、中断处理与上下文切换、IPC 同步机制、内存管理五大核心模块出发,深入剖析 RT-Thread 内核实现细节,并辅以源码解读、流程图、时序图与性能数据。 目录 线程管理与调度器原理 1.1 线程控制块(T…...
uni-app,小程序自定义导航栏实现与最佳实践
文章目录 前言为什么需要自定义导航栏?基本实现方案1. 关闭原生导航栏2. 自定义导航栏组件结构3. 获取状态栏高度4. 样式设置 内容区域适配跨平台适配要点iOS与Android差异处理 常见导航栏效果实现1. 透明导航栏2. 滚动渐变导航栏3. 自定义返回逻辑 解决常见问题1. …...
小程序消息订阅的整个实现流程
以下是微信小程序消息订阅的完整实现流程,分为 5个核心步骤 和 3个关键注意事项: 一、消息订阅完整流程 步骤1:配置订阅消息模板 登录微信公众平台进入「功能」→「订阅消息」选择公共模板或申请自定义模板,获取模板IDÿ…...
istio in action之Gateway流量入口与安全
入口网关,简单来说,就是如何让外部世界和我们精心构建的集群内部服务顺畅地对话。在网络安全领域,有一个词叫流量入口,英文叫Ingress。这指的是那些从我们自己网络之外,比如互联网,发往我们内部网络的流量。…...
LeetCode 1722. 执行交换操作后的最小汉明距离 题解
示例: 输入:source [1,2,3,4], target [2,1,4,5], allowedSwaps [[0,1],[2,3]] 输出:1 解释:source 可以按下述方式转换: - 交换下标 0 和 1 指向的元素:source [2,1,3,4] - 交换下标 2 和 3 指向的元…...
区块链详解
1. 引言 1.1 背景 在数字化时代,信息的存储、传输和验证面临诸多挑战,如数据篡改、信任缺失、中心化风险等。区块链技术应运而生,作为一种分布式账本技术,它通过去中心化、去信任化、不可篡改等特性,为解决这些问题提…...
申能集团笔试1
目录 注意 过程 注意 必须开启摄像头和麦克风 只能用网页编程,不能用本地环境 可以用Index进行测试 过程 我还以为是编程,没想到第一次是企业人际关系、自我评价的选择题,哈哈哈有点轻松,哦对他要求不能泄漏题目,…...
机器人手臂的坐标变换:一步步计算齐次矩阵过程 [特殊字符]
大家好!今天我们来学习如何计算机器人手臂的坐标变换。别担心,我会用最简单的方式解释这个过程,就像搭积木一样简单! 一、理解问题 我们有一个机器人手臂,由多个关节组成。每个关节都有自己的坐标系,我们需要计算从世界坐标系(W)到末端执行器(P₃)的完整变换。 二、已…...
神经元和神经网络定义
在深度学习中,神经元和神经网络是构成神经网络模型的基本元素。让我们从基础开始,逐步解释它们的含义和作用。 1️⃣ 神经元是什么? 神经元是神经网络中的基本计算单元,灵感来自于生物神经系统中的神经元。每个人的脑中有数以亿…...
Vue——Axios
一、Axios 是什么 Axios 是一个基于 promise 网络请求库,作用于 node.js 和浏览器中。 它是 isomorphic 的 ( 即同一套代 码可以运行在浏览器和 node.js 中 ) 。在服务端它使用原生 node.js http 模块 , 而在客户端 ( 浏览端 ) 则使 用 XMLHttpRequest…...
力扣:轮转数组
题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 例子 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5…...
TCP/IP协议的体系结构
文章目录 前言数据链路层网络层传输层应用层 前言 TCP/IP通信体系主要分为四个层次,从底至上分别为: 数据链路层 >网络层 > 传输层 >应用层 该体系的工作原理主要依靠封装与分用的使用完成对信息的传递与解析。 1. 所谓封装,就是上层…...
Vue3 中 ref 与 reactive 的区别及底层原理详解
一、核心区别 1. 数据类型与使用场景 • ref 可定义基本类型(字符串、数字、布尔值)和对象类型的响应式数据。对于对象类型,ref 内部会自动调用 reactive 将其转换为响应式对象。 语法特点:需通过 .value 访问或修改数据&#…...