spring boot整合mybatis plus

Spring Boot 和 MyBatis-Plus 的简单整合 打开浏览器访问http://localhost:8080/UserController/insert,可以看到页面上打印“数据插入成功”,刚好和UserController类中的代码功能一致,同时控制台也打印出了insert语句,说明调用成功。MyBatis是一个强大且稳定的持久层解决方案,也是众多java程序员入门的首选,而MyBatis-Plus是MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。需要配置好自己的数据库连接,用户名,密码。 阅读详情

简介

MyBatis-Plus是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

本文环境

  • jdk1.8
  • spring boot 2.1.8.RELEASE
  • mybatis-plus 3.2.0
  • mysql 5.1.47

MyBatis-Plus的逆向工程

一、添加依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--mybatis-plus代码生成-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--mybatis plus默认的模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.1</version>
        </dependency>
注:MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖 mybatis-plus-generator

二、yml文件配置

直接贴上最简单的配置

server:
  port: 8080
spring:
  application:
    name: mybatis_plus
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/user?characterEncoding=utf8&useSSL=false
    username: root
    password: root
mybatis-plus:
  type-aliases-package: top.mybatis_plus.user.entity
  mapper-locations: classpath:top/mybatis_plus/user/mapper/xml/*.xml

三、代码生成器

		AutoGenerator autoGenerator = new AutoGenerator();
        //全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");//项目路径
        globalConfig.setOutputDir(projectPath + "/src/main/java")
                .setAuthor("wwh")
                .setOpen(false)
                .setFileOverride(true)//生成的文件是否覆盖
                .setIdType(IdType.INPUT)//ID类型
                .setActiveRecord(false);//不支持ActiveRecord
        autoGenerator.setGlobalConfig(globalConfig);
        //数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setUrl("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false&serverTimezone=UTC")
                .setDriverName("com.mysql.jdbc.Driver")
                .setUsername("root")
                .setPassword("root");
        autoGenerator.setDataSource(dataSourceConfig);
        //包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("top.mybatis_plus.user")
                .setController("controller")
                .setService("service")
                .setServiceImpl("service.impl")
                .setEntity("entity")
                .setMapper("mapper")
                .setXml("mapper.xml");
        autoGenerator.setPackageInfo(packageConfig);
        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig()
                .setNaming(NamingStrategy.underline_to_camel)
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setEntityLombokModel(true)//lombok模式的实体类
                .setRestControllerStyle(true)//RestController
                .setControllerMappingHyphenStyle(true)
                .setInclude("user");//这里输入要生成的表名
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.execute();

执行这段代码就可以生成文件,当然数据库连接要配成自己的。

注:mapper文件要加上注解@Mapper注解

一般我们都会重新写service层,因为service层和业务相关,自动生成的文件带上父类反而不好用(也可能是我没找到service生成的方法)

四、CRUD操作

上面已经生成成功文件,下面进行简单的CRUD操作

controller层

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/selectUserById/{id}")
    public User selectUserById(@PathVariable("id") int id){
        return userService.selectUserById(id);
    }

    @PostMapping("/saveUser")
    public void saveUser(User user){
        userService.saveUser(user);
    }

    @PostMapping("/updateUser")
    public void UpdateUser(User user){
        userService.updateUser(user);
    }

    @PostMapping("/deleteUser/{id}")
    public void deleteUser(@PathVariable("id") int id) {
        userService.deleteUser(id);
    }
}

service层

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public User selectUserById(int id) {
        return userMapper.selectOne(new QueryWrapper<User>().eq("id",id));
    }

    @Override
    public void saveUser(User user) {
        userMapper.insert(user);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void deleteUser(int id) {
        userMapper.deleteById(id);
    }
}

dao层

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

实体类

//生成get,set方法
@Data
//生成equals和hashcode方法,默认不管父类继承的属性
@EqualsAndHashCode(callSuper = false)
//生成的set方法默认返回本实体类
@Accessors(chain = true)
public class User implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.INPUT)
    private Integer id;

    /**
     * 用户名
     */
    private String name;

    /**
     * 手机号
     */
    private String phone;
    
    /**
     * 状态 0 已删除 1 正常
     */
    @TableLogic
    private Integer status;
}

接口测试都是可以运行的,这里就不贴结果了。
项目目录

五、开发中遇到的问题

1、Mybatis-plus插入、修改时,属性为null时,该属性不会改变
原因:mybatis plus的字段策略默认为非null,也就是说当字段属性为null时,该字段不会被更新。

mybatis plus有三种字段策略:

  • IGNORED:忽略
  • NOT_NULL:非 NULL( 默认策略 )
  • NOT_EMPTY:非空

解决办法:
(1)修改全局的验证策略

mybatis-plus:
  global-config:
    db-config:
      insert-strategy: ignored
      update-strategy: ignored
注:字段验证策略 3.1.2之后使用这三个insertStrategy,updateStrategy,whereStrategy

(2)调整字段验证注解

	@TableField(updateStrategy = FieldStrategy.IGNORED)
    private String name;

(3)使用 UpdateWrapper(基本上没用过)

userMapper.update(user,new UpdateWrapper<User>()
                .set("name",null).eq("id",user.getId()));

2、逻辑删除
有一次查找数据时怎么都查不到数据,最后找了半天发现是逻辑删除值没有配置,每次查找的时候都会带上status=0(逻辑未删除值默认是0)
什么是逻辑删除
逻辑删除是为了方便数据恢复和保护数据本身价值的一种方案,逻辑删除不是针对删除数据,而是将数据的状态设置为已删除状态,查询的时候会自动查询状态为未删除的数据。

逻辑删除配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 0 #逻辑删除状态
      logic-not-delete-value: 1 #逻辑未删除状态

在实体类字段加上注解@TableLogic

	@TableLogic
    private Integer status;

删除时 UPDATE user SET status=0 WHERE id=? AND status=1
查找时 select * from user where status=1

Spring boot整合Mybatis+Mybatis-plus Spring boot对于我来说是一个刚接触的新东西,学习过程中,发现这东西还是很容易上手的,Spring boot没配置时会默认使用Spring data jpa,这东西可以说一个极简洁的工具,可是我还是比较喜欢用mybatis,工具是没有最好的,只有这合适自己的。 说到mybatis,最近有一个很好用的工具--------mybatis-Plus(官网),现在更新的版本是2.1.2,这里使用的也是这个版本。我比较喜欢的功能是代码生成器,条件构造器,这样就可以更容易的去开发了。 mybatisPlus 阅读详情

相关推荐

Spring Boot 实战(11)整合MyBatis-Plus

分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作。

2401_86984420的博客 1232

Mybatis-Plus 全局Update更新策略,和insert插入查询策略

前言 最近在使用mybatis-plus做项目的时候,发现使用updatById方法的时候,更新某个字段时候出现了问题,一般业务操作都是更新不为空的字段,结果发现更新了所有字段,这是由于mybatis-plus全局的更新策略导致的,我们可以通过相应全局配置来解决 看官方文档可知,数据库全局配置策略有三种,分别是查询策略,更新策略,和添加策略 点击这里进入官方文档 全局数据库策略配置 配置 #全局策略 mybatis-plus.global-config.db-config.update-strateg

daTou 3434

Spring Boot 整合 MyBatis Plus:快速构建高效持久层

摘要: MyBatis-Plus作为MyBatis的增强工具,通过简化CRUD操作显著提升Java后端开发效率。文章详细介绍了Spring Boot整合MyBatis-Plus的步骤:1)引入依赖配置数据源;2)使用注解简化实体类与Mapper接口(继承BaseMapper即可获得基础CRUD能力);3)演示Service层调用示例。核心优势包括无侵入集成、自动生成代码、内置分页/乐观锁等功能,有效减少冗余代码,尤其适合单表操作频繁的场景。通过5分钟快速配置,开发者可专注业务逻辑而非重复的持久层编写。

专栏 1393

MyBatis-Plus——超详细讲解配置文件

超详细讲解MyBatis-Plus中的配置,对各个属性进行介绍以及演示如何使用,让我们在开发当中快人一步。

一心同学的博客 2万+

Spring Boot入门(12):从零开始!轻松掌握Spring Boot整合MyBatis-Plus的最佳实践!

一文吃透SpringBoot整合mybatis-plus及实战演练,赶紧来学!

**My Coding Family** 1万+

Spring Boot整合Security与MyBatis-Plus实战项目

Spring Security 是 Spring 生态中用于保障应用安全的重要组件,它为 Web 应用提供了认证(Authentication)与授权(Authorization)的核心功能。本章将深入探讨 Spring Security 的基本原理和核心机制,包括其在 Spring Boot 中的地位、认证与授权的流程、常用的安全配置方法,以及安全过滤器链的工作原理。通过本章的学习,开发者将能够理解 Spring Security 的运行机制,并具备构建安全 Web 应用的基础能力。

weixin_42608299的博客 1151

如何解决 MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题

如何解决 MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题

技术路上的探险家 5637

Bartender 2021破解版安装教程:手把手教你从下载到激活(附详细步骤图)

本文详细介绍了BarTender 2021专业版的安装与高效应用指南,从基础配置到高级条码设计,帮助用户快速掌握标签设计与打印技术。内容涵盖安装步骤、标签模板创建、数据连接与批量打印技巧,以及高级功能如安全策略与自动化集成,适合零售、物流、制造等行业用户提升工作效率。

p4q5r6s7t的博客 2649

[转载]MyBatis-Plus——超详细讲解配置文件

在我们的【MyBatis-Plus】中有许多【配置】,也就是当我们需要用到的时候,会在配置文件中进行编写的属性,本篇博客将会讲解这些配置的【作用】,以及简单【使用】。

lklalmq的博客 5789

模电(十四)差分放大电路

目录 差分放大电路 双端输入双端输出 Q点分析 抑制共模信号 放大差模信号 双端输入单端输出 Q点分析 差模信号分析 共模信号分析 单端输入双端输出 单端输入单端输出 四种接法比较 具有恒流源的差分放大电路 差分放大电路的改进 差分放大电路 采用引入支流负反馈,温度补偿来克服零点漂移(温度变化,直流电源波动,元器件老化产生的输入电压为零,输出电压不为零的...

weixin_43674847的博客 2万+

RDMA网络通信技术、NCCL集合通讯(GPU)

NCCL 是 NVIDIA 专为 GPU 设计的高性能集合通信库,用于优化多 GPU、多节点间的集体操作(如 AllReduce、Broadcast、AllGather 等),是深度学习分布式训练的核心组件。RDMA 允许计算机直接访问远程内存,无需 CPU 干预,大幅降低了网络通信的延迟和 CPU 开销。常见的 RDMA 实现包括。是两项关键技术,用于优化节点间数据传输效率和大规模并行计算性能。在高性能计算(HPC)、人工智能训练和数据密集型场景中,

weixin_42795092的博客 2422

mybatis和mybatis-plus设置值为null 不起作用 解决方案

*原因:**mybatis-plus FieldStrategy 有三种策略:IGNORED:0 忽略NOT_NULL:1 非 NULL,默认策略NOT_EMPTY:2 非空而默认更新策略是 NOT_NULL:非 NULL;即通过接口更新数据时数据为NULL值时将不更新进数据库。

WYT11的博客 4244

基于C#的跨平台上位机开发:一次编写,多平台运行

摘要: 本文探讨了如何利用C#进行跨平台上位机开发,以适配Windows、Linux、macOS等多平台需求。通过分析传统单平台开发的局限性(如API差异、硬件接口兼容性),提出基于.NET 5/6/7的解决方案,重点推荐Avalonia(类WPF的跨平台UI框架)和GtkSharp(基于GTK+)实现图形界面。同时,针对硬件通信需求,介绍了System.IO.Ports串口通信和LibUsbDotNet的跨平台支持,并强调多平台调试(VS Code、Docker)的重要性,最终实现一次编码、多端部署的高效

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1409

Spring Boot整合MyBatis-Plus

在我们深入讨论整合过程之前,让我们先简单了解一下Spring Boot和MyBatis-Plus。是一个用于创建基于Spring的应用程序的框架。它通过约定大于配置的方式,简化了Spring应用程序的开发过程,使得开发者能够更专注于业务逻辑的实现。是在MyBatis基础上的一个增强工具库,简化了MyBatis的开发,提供了许多便利的功能,如自动生成代码、分页插件等,使得持久层的开发更加高效。通过以上简单的步骤,我们成功地将Spring Boot与MyBatis-Plus整合在一起,极大地简化了持久层的开发。

微赚淘客系统开发者博客 929

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。

weixin_44061195的博客 2万+

ANSYS Help USER300

USER 300概述单元描述输入数据假设与限制条件 概述 单元描述 Mechanical APDL提供了一种方便的方法来创建自定义的单元,命名为USER300,可以创建几乎任何单元类型。 UserElem子程序为Mechanical APDL在单元类型创建上提供了一个接口,可传递用户自定义单元创建时所需的所有数据,然后从自定义单元返回所有数据和结果,以更新数据库和文件。因为通过接口可以访问数据库和文件信息,所以很少需要了解Mechanical APDL数据库程序和文件结构。该接口还提供了获取Mechanic

weixin_47019765的博客 2235

十八,Spring Boot 整合 MyBatis-Plus 的详细配置

MyBatis-Plus 官网文档:https://baomidou.com/是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis puls (简称 MP) 是一个Mybatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发,提供效率而生。内置通用Mapper,通用 Service,通过少量配置即可实现单表大部分的CRUD操作,更有强大的条件构造器,满足各类使用需求。

weixin_61635597的博客 8703

干货|C#上位机与西门子PLC的Profinet协议通信开发(工控机版)

文章摘要: Profinet是西门子主导的工业以太网协议,支持实时通信(RT/IRT),广泛应用于PLC与工控机通信。本文聚焦C#上位机通过S7协议(集成于Profinet接口)高效访问西门子PLC(S7-1200/1500等),提供完整开发方案: 协议基础:解析Profinet三层架构(TCP/IP层、实时层、应用层),对比S7协议优势(开发便捷、跨平台); 开发实践:基于S7NetPlus/Snap7库实现数据读写,涵盖DB块、I/O点等地址规则; 环境配置:工控机(Windows/Linux/统信UO

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1213

mybatis-plus整合spring boot极速入门

学会使用mybatis-plus,简化开发。

烛照@123的博客 1945

10、利用智能合约实现公平的私有集合交集

本文探讨了利用智能合约实现公平的私有集合交集(PSI)的多种协议,重点分析了协议 Π 和 Π∗ 的气体成本与性能特点。同时对比了包括 Justitia 和 Anesidora 在内的现有方案,突出了仅使用智能合约实现硬币补偿公平性的优势。文中还介绍了相关密码学基础、安全模型及隐私保障机制,为在不同应用场景下选择高效、安全的 PSI 协议提供了理论支持和实践指导。

linux的博客 96

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring Boot整合MyBatis-Plus详细步骤

本文详细介绍了Spring Boot与MyBatis-Plus的整合流程。使用MyBatis-Plus简化了数据库操作,结合Spring Boot快速构建RESTful接口。该整合方案显著提升了开发效率,适合企业级Java应用开发。

土豆丝的博客 927

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring Boot整合MyBatis Plus详解

在Java企业级开发中,Spring Boot以其自动配置、简化开发流程的特性,成为微服务架构下首选的框架之一。而MyBatis Plus则以其强大的CRUD操作、代码生成器等功能,进一步简化了数据库操作。本文将详细介绍如何在Spring Boot项目中整合MyBatis Plus,实现快速的数据访问。

weixin_65837469的博客 1160

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Spring Boot】035-Spring Boot 整合 MyBatis Plus

MyBatis Plus 为简化开发而生!MyBatis Plus(简称 MyBatis-Plus 或 MP)是 MyBatis 的增强工具包,它在 MyBatis 的基础上提供了很多便捷的功能,简化了开发过程。只做增强,不做改变、效率至上,功能丰富。

訾博(ZiBo)的博客 1542

Spring Boot 整合 MyBatis & MyBatis-Plus

Spring Boot 可以很方便地集成。(增强版 MyBatis)。

SAFE20242034的博客 525

Spring Boot整合MyBatis-Plus之分页的实现

本文主要介绍了在Spring Boot整合MyBatis-Plus的应用中,使用PageHelper或者MyBatis-Plus中的Page对象和IPage接口实现分页功能。

土豆丝的博客 1111
上一篇: synchronized修饰静态方法和普通方法的区别
下一篇: springboot整合shiro
ROAOR1
博客等级 码龄9年 33粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值