springboot3 + mybatis-plus3 创建web项目实现表增删改查

news2025/5/10 18:43:31

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:简化代码的自动化工具

这个配置组合为开发者提供了一个强大且现代化的基础,适用于构建高效、可扩展的企业级应用。具体而言:

  1. Spring Boot 3.4.5:作为 Java 开发的主流框架,Spring Boot 提供了更加简洁、易于维护的开发体验。它集成了大量开箱即用的功能,简化了开发流程,极大提高了开发效率。

  2. MyBatis-Plus 3.5.12:基于 MyBatis 的增强工具,MyBatis-Plus 在保持 MyBatis 灵活性的同时,提供了更多强大的功能,如自动生成 CRUD 操作,分页查询等,极大减少了重复代码量。通过这一工具,开发者可以更加专注于业务逻辑的实现,而不必为数据库操作编写大量冗余的代码。

  3. 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-PlusBaseMapper,开发者只需简单地继承该接口,就能获得对数据库表的基本操作(如增、删、改、查)的支持。
  • 无需编写复杂的 SQL 语句,MyBatis-Plus 提供了丰富的查询构造器,方便进行复杂查询的构建。
(3)自动分页
  • MyBatis-Plus 提供了分页插件,结合 Spring Boot 自动配置,可以快速实现数据库查询结果的分页功能。
  • 通过简单配置,分页功能开箱即用,无需额外的代码编写。
(4)易于集成
  • Spring Boot 提供了非常便捷的集成方式,MyBatis-Plus 也支持与 Spring Boot 的无缝集成。只需在 application.propertiesapplication.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 {
    @Serial
    private 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 {

    @Resource
    private SysUserMapper sysUserMapper;


    /**
     * Description:  批量新增优化版
     */
    @Override
    public 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 {
    /**
     * 服务对象
     */
    @Autowired
    private 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

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

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

相关文章

【人工智能学习之动作识别TSM训练与部署】

【人工智能学习之动作识别TSM训练与部署】 基于MMAction2动作识别项目的开发一、MMAction2的安装二、数据集制作三、模型训练1. 配置文件准备2. 关键参数修改3. 启动训练4. 启动成功 ONNX模型部署方案一、环境准备二、执行转换命令 基于MMAction2动作识别项目的开发 一、MMAct…

sqli-labs靶场18-22关(http头)

目录 less18&#xff08;user-agent&#xff09; less19&#xff08;referer&#xff09; less20&#xff08;cookie&#xff09; less21&#xff08;cookie&#xff09; less22&#xff08;cookie&#xff09; less18&#xff08;user-agent&#xff09; 这里尝试了多次…

Android系统架构模式分析

本文系统梳理Android系统架构模式的演进路径与设计哲学&#xff0c;希望能够借此探索未来系统的发展方向。有想法的同学可以留言讨论。 1 Android层次化架构体系 1.1 整体分层架构 Android系统采用五层垂直架构&#xff0c;各层之间通过严格接口定义实现解耦&#xff1a; 应用…

Web前端VSCode如何解决打开html页面中文乱码的问题(方法2)

Web前端—VSCode如何解决打开html页面中文乱码的问题&#xff08;方法2&#xff09; 1.打开VScode后&#xff0c;依次点击 文件 >> 首选项 >> 设置 2.打开设置后&#xff0c;依次点击 文本编辑器 >> 文件&#xff08;或在搜索框直接搜索“files.autoGuessEnc…

单调栈模版型题目(3)

单调栈型题目贡献法 基本模版 这是数组a中的 首先我们要明白什么叫做贡献&#xff0c;在一个数组b{1,3,5}中&#xff0c;连续包含1的连续子数组为{1}&#xff0c;{1,3}&#xff0c;{1,3,5}&#xff0c;一共有三个&#xff0c;这三个数一共能组成6个连续子数组&#xff0c;而其…

ts axios中报 Property ‘code‘ does not exist on type ‘AxiosResponse<any, any>‘

ts语法有严格的格式&#xff0c;如果我们在处理响应数据时&#xff0c;出现了axios响应中非默认字段&#xff0c;就会出现标题那样的警告&#xff0c;我们可以通过创建axios.dt.ts解决这个问题 下面是我在开发中遇到的警告&#xff0c;code并不是axios默认返回的字段&#xff0…

[AI Tools] Dify 工具插件上传指南:如何将插件发布到官方市场

Dify 作为开源的 LLM 应用开发平台,不仅支持本地化插件开发,也提供了插件市场机制,让开发者能够将自己构建的插件发布并供他人使用。本文将详细介绍如何将你开发的 Dify Tools 插件上传至官方插件市场,包括 README 编写、插件打包、仓库 PR 等核心步骤。 一、准备 README 文…

用react实现一个简单的三页应用

下面是一个使用 React Router 的简单示例&#xff0c;演示了如何在 React 应用中实现页面之间的导航。 &#x1f6e0;️ 第一步&#xff1a;使用 Vite 创建项目 npm create vitelatest my-router-app -- --template react cd my-router-app npm install&#x1f680; 第二步&a…

Go使用Gin写一个对MySQL的增删改查服务

首先用SQL创建一个包含id、name属性的users表 create table users (id int auto_incrementprimary key,name varchar(255) null );查询所有用户信息&#xff1a; func queryData(db *sql.DB, w http.ResponseWriter) {rows, err : db.Query("SELECT * FROM users"…

Xcode16.3配置越狱开发环境

首先先在https://developer.apple.com/xcode/resources/ 这里面登陆Apple账号&#xff0c;然后访问url下载 https://download.developer.apple.com/Developer_Tools/Xcode_16.3/Xcode_16.3.xip 1、安装theos https://theos.dev/docs/installation-macos 会安装到默认位置~/th…

SCADA|KIO程序导出变量错误处理办法

哈喽,你好啊,我是雷工! 最近在用KingSCADA3.52版本的软件做程序时,在导出变量进行批量操作时遇到问题,现将解决办法记录如下。 以下为解决过程。 01 问题描述 在导出KIO变量时,选择*.xls格式和*.xlsx时均会报错: 报如下错误: Unknown error 0x800A0E7A ADODB Connectio…

【漫话机器学习系列】249.Word2Vec自然语言训练模型

【自然语言处理】用 Word2Vec 将词语映射到向量空间详解 一、背景介绍 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;我们常常需要将文本信息转化为机器能够理解和处理的形式。传统的方法&#xff0c;如 one-hot编码&#xff0c;虽然简单&#xff0c;但存在严重…

云轴科技ZStack入选赛迪顾问2025AI Infra平台市场发展报告代表厂商

DeepSeek凭借低成本、高性能、开源优势带来的蝴蝶效应依然在持续影响企业AI应用部署。尤其在数据安全备受关注的背景下&#xff0c;私有化部署已经成为企业应用AI大模型的优选方案。赛迪顾问在近期发布的《2025中国AI Infra平台市场发展研究报告》中认为&#xff0c;在推理算力…

安达发|人力、机器、物料——APS排程软件如何实现资源最优配置?

引言&#xff1a;制造业资源优化的核心挑战 在现代制造业中&#xff0c;人力、机器、物料是生产运营的三大核心资源。如何让这些资源高效协同&#xff0c;避免浪费&#xff0c;是企业降本增效的关键。然而&#xff0c;许多制造企业仍面临以下问题&#xff1a; 人力安排不合理…

【软件测试】软件缺陷(Bug)的详细描述

目录 一、软件缺陷(Bug) 1.1 缺陷的判定标准 1.2 缺陷的生命周期 1.3 软件缺陷的描述 1.3.1 提交缺陷的要素 1.3.2 Bug 的级别 1.4 如何发现更多的 Bug? 1.5 缺陷的有效管理 1.5.1 缺陷的编写 1.5.2 缺陷管理工具 1.5.2.1 缺陷管理 1.5.2.2 用例管理 一、软件缺陷…

HTTP传输大文件的方法、连接管理以及重定向

目录 1. HTTP传输大文件的方法 1.1. 数据压缩 1.2. 分块传输 1.3. 范围请求 1.4. 多段数据 2. HTTP的连接管理 2.1. 短连接 2.2. 长连接 2.3. 队头阻塞 3. HTTP的重定向和跳转 3.1. 重定向的过程 3.2. 重定向状态码 3.3. 重定向的应用场景 3.4. 重定向的相关问题…

图像来源:基于协同推理的双视角超声造影分类隐式数据增强方法|文献速递-深度学习医疗AI最新文献

Title 题目 Image by co-reasoning: A collaborative reasoning-based implicit data augmentation method for dual-view CEUS classification 图像来源&#xff1a;基于协同推理的双视角超声造影分类隐式数据增强方法 01 文献速递介绍 结合了B型超声&#xff08;BUS&…

dotnet core c#调用Linux c++导出函数

1.声明C++导出函数 platform_export.h // // Created by dev on 5/6/25. //#ifndef PLATFORM_EXPORT_H #define PLATFORM_EXPORT_H #if defined(_WIN32)#ifdef LIB_EXPORTS#define LIB_API __declspec(dllimport)#else#define LIB_API __declspec(dllimport)#endif #else#ifde…

宁德时代区块链+数字孪生专利解析:去中心化身份认证重构产业安全底座

引言&#xff1a;当动力电池巨头瞄准数字孪生安全 2025年5月6日&#xff0c;金融界披露宁德时代未来能源&#xff08;上海&#xff09;研究院与母公司宁德时代新能源科技股份有限公司联合申请的一项关键专利——“身份验证方法、系统、电子设备及存储介质”。这项技术将区块链…

1.微服务概念

1.单体、分布式、集群 先理解单体、集群、分布式这些概念 1.单体 一个系统业务量很小的时候,所有的代码都放在一个项目中&#xff0c;然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构. 1.1 优点 单体应用开发简单,部署测试简单 …