Mybatis-Plus(一)

2023-11-02

Mybatis-Plus(一)

 

最近在项目当中学习到了一种新的构建sql查询的技术—mybatis-plus  相交与之前使用的example即先创建一个example对象 再根据这个对象创建一个criteria对象来说,这种方式更为简洁方便,他为我们提供了基础的增删改查操作,以至于 如若你只是想写增删该查的话,你的mapper.xml文件以及相应的dao service文件当中是一个方法都不用去写的,下面我们就来学习这种简便的构建方法;
首先,Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生
这是它的下小鸟:

下面是它特性的一些介绍:
  • 无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
  • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击
  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
  • 支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
  • 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词
  • 内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询

内置全局拦截插件:提供全表 delete update 操作智能分析阻断,预防误操作

下面是官网给出的例子 我们来分析以下:
//假设我们已存在一张 User 表,且已有对应的实体类 User,实现 User 表的 CRUD 操作我们需要做什么呢?

/** User 对应的 Mapper 接口 */
public interface UserMapper extends BaseMapper<User> { }

//如果没有什么特殊的操作,那么这个mapper文件当中是什么都不用写的

基本CRUD

// 初始化 影响行数
int result = 0;
// 初始化 User 对象
User user = new User();

// 插入 User (插入成功会自动回写主键到实体类)
user.setName("Tom");
result = userMapper.insert(user);

// 更新 User,用到的就是刚刚插入的user
user.setAge(18);
result = userMapper.updateById(user);

// 查询 User
User exampleUser = userMapper.selectById(user.getId());

// 查询姓名为‘张三’的所有用户记录
//这里new EntityWrapper<>() 就是用来构建查询条件的
//具体你查询的是哪个类 里面泛型就写那个类
//当然条件的拼接不止有eq还有许多,后面的文章当中会提到
//具体EntityWrapper的用法后面再进行介绍
List<User> userList = userMapper.selectList(
        new EntityWrapper<User>().eq("name", "张三")
);

再如以下的例子:

List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "张三")
                .eq("sex", 0)
                .between("age", "18", "50")
);
New page就是用来创建分页条件的,相当于的sql就是:
SELECT *
FROM sys_user
WHERE (name='张三' AND sex=0 AND age BETWEEN '18' AND '50')
LIMIT 0,10


// 删除 User
result = userMapper.deleteById(user.getId());
正如上所示:我们仅仅需要的是继承一个BaseMapper即可实现大部分表单的增删改查,极大的减少了开发的负担。

  当然我们也可以使用AR模式 即注解指定表明,指定主键名称的形式来进行操作:

下面我们就来说一下他和spring,springBoot的集成:

相对于springBoot来说Spring的集成会复杂一些,但也仅限于去更换一些使用后的包:

Mybatis 自带的MybatisSqlSessionFactoryBean替换为 MP 自带的即可。
也就是将xml配置文件当中Factory的包替换为下面的包:具体的配置如下
com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean,当然还有相应的包也应该替换;
具体的配置大家可以去官网查看,下面主要说一下springBoot的配置
官网地址:https://baomidou.gitee.io/mybatis-plus-doc/#/install

SprintBoot的集成:

spring boot 项目集成mp可以使用starter
下面是pom文件当中加入的依赖和配置:
<dependencies>
  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>最新版本号</version>
  </dependency>
</dependencies>
<!-- 如果mapper.xml是放在src/main/java目录下,需配置以下-->
<build>
  <resources>
      <resource>
          <directory>src/main/java</directory>
          <filtering>false</filtering>
          <includes>
              <include>**/mapper/*.xml</include>
          </includes>
      </resource>
  </resources>
</build>
application.yml配置文件:
mybatis-plus:
  # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
  # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:/mapper/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.yourpackage.*.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 3
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: true
    #mp2.3+ 全局表前缀 mp_
    #table-prefix: mp_
    #刷新mapper 调试神器
    #refresh-mapper: true
    #数据库大写下划线转换
    #capital-mode: true
    # Sequence序列接口实现类配置
    key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
    #逻辑删除配置(下面3个配置)
    logic-delete-value: 1
    logic-not-delete-value: 0
    sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
    #自定义填充策略接口实现
    meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
  configuration:
    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId) 
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: 'null'
启动类Java Configuration配置:
@Configuration
@MapperScan("com.yourpackage.*.mapper*")
public class MybatisPlusConfig {
   /*
    * 分页插件,自动识别数据库类型
    * 多租户,请参考官网【插件扩展】
    */
   @Bean
   public PaginationInterceptor paginationInterceptor() {
      return new PaginationInterceptor();
   }

   /*
    * oracle数据库配置JdbcTypeForNull
    * 参考:https://gitee.com/baomidou/mybatisplus-boot-starter/issues/IHS8X
    不需要这样配置了,参考 yml:
    mybatis-plus:
      confuguration
        dbc-type-for-null: 'null' 
   @Bean
   public ConfigurationCustomizer configurationCustomizer(){
       return new MybatisPlusCustomizers();
   }

   class MybatisPlusCustomizers implements ConfigurationCustomizer {

       @Override
       public void customize(org.apache.ibatis.session.Configuration configuration) {
           configuration.setJdbcTypeForNull(JdbcType.NULL);
       }
   }
   */
}
以上就是基本的使用以及与springspringBoot的集成,下一篇将分析以下它的单个核心特性,代码生成器,条件构造器,以及通用的CRUD.
 
 
 
 
 
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis-Plus(一) 的相关文章

  • MyBatisPlus(三)CRUD接口操作

    一 CRUD扩展 Insert 插入 span class token comment 测试插入 span span class token annotation punctuation 64 Test span span class to
  • SpringBoot整合MybatisPlus时“注入失败”的问题记录

    问题情景 xff1a 最近将几个小的Demo整合在一起 xff0c 其中项目A使用Mybatis项目B使用Mybatis plus 在正常的修改完application yml xff0c pom文件后尝试启动项目 xff0c 启动失败 报
  • 使用mybatisplus要导入的依赖

    lt dependency gt lt groupId gt com spring4all lt groupId gt lt artifactId gt spring boot starter swagger lt artifactId g
  • idea插件生成dao类service类controller类以及mapper.xml

    idea插件生成dao类service类controller类以及mapper xml 安装插件Easycode和MybatisX 不用自己写代码 1 Files Settings Plugins 分别搜索Easycode和MybatisX
  • Mybatis-Plus时间范围查询

    方式一 通过apply方法 来实现时间范围查询 该方法可用于数据库函数 动态入参的params对应前面applySql内部的 index 部分 这样是不会有sql注入风险的 反之会有 apply String applySql Object
  • mybatis-plus Invalid bound statement (not found):

    1 若是使用了多数据源配置 请检查 DataSourceConfig配置类 将SqlSessionFactoryBean改为mybatis plus里面的MybatisSqlSessionFactoryBean Bean name test
  • mybatis—plus

    接口和实现类都继承 如果你让你的服务接口继承 IService 并让你的服务实现类继承 ServiceImpl 那么你的服务接口将明确地列出所有可用的 CRUD 方法 只继承 ServiceImpl 如果你只让你的服务实现类继承 Servi
  • MybatisPlus中的的BaseMapper接口的认识

    接上一篇博客 还是在接手别人的代码的时候 看到了如下的代码 当时自己只是查询了以下wrapper构造器的用法 这里其实还有一个MybatisPlus中的BaseMapper接口的用法 上面这句代码的意思其实就相当于 SELECT COUNT
  • nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 的解决办法

    问题概述 在基于微服务架构风格的项目开发过程中 为了提高快速开发的目的 提高开发效率 集成了 MyBatisPlus 对于 MyBatisPlus 封装的 CRUD API 接口已经非常强大了 但是有时还是需要使用其动态 SQL 的拼接 在
  • mybatisplus 修改某个字段为空值

    文章目录 前言 一 重现bug 二 解决方法 总结 前言 需求 移除企业 将ent id设置为null 一 重现bug 1 使用updateById 更新单独个字段为空值 结果报错 Override public void update S
  • MockMvc测试和spring boot视图开发

    文章目录 导入配置 使用步骤 1 Model准备 2 创建控制器 3 Web测试的支持 视图 JSP 开发 配置文件 编写控制器 环境配置 自定义过滤器 导入配置 pom xml
  • MyBatis-Plus:条件构造器Wrapper

    目录 1 Wrapper概述 1 1 Wrapper的继承关系 1 2 Wapper介绍 1 3 各个构造器使用区别 1 4 构造器常用方法 2 Wrapper常用构造器介绍 2 1 QueryWrapper 2 2 UpdateWrapp
  • SpringBoot 中 MyBatis-Plus 集成动态多数据源过程(亲测可用)

    使用场景 当你的项目中使用到多个数据源或者需要在程序运行过程中动态的添加数据源时可以参考本文中的实现 这里使用的是dynamic datasource spring boot starter 它是一个基于springboot的快速集成多数据
  • Mybatis-Plus高级查询LambdaQueryWrapper&QueryWrapper

    目录 前言 Wrapper 查询构造器 查询条件 前期准备 查询条件 allEq eq ne gt ge lt le between notBetween like notLike likeLeft likeRight isNull 空值查
  • springboot整合mybatis-plus,代码自动生成

    Mybatis Plus 简称MP 是一个 Mybatis 的增强工具 在 Mybatis 的基础上只做增强不做改变 为简化开发 提高效率而生 特性 无侵入 Mybatis Plus 在 Mybatis 的基础上进行扩展 只做增强不做改变
  • Mybatis-Plus中update更新操作用法

    目录 一 前言 二 update 1 关于修改的4个条件构造器 2 UpdateWrapper 用法示例 3 LambdaUpdateWrapper 用法示例 4 UpdateChainWrapper 用法示例 5 LambdaUpdate
  • mybatis-plus入坑指南

    简介 MyBatis Plus 简称 MP 是一个 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 特性 无侵入 只做增强不做改变 引入它不会对现有工程产生影响 如丝般顺滑 损耗小 启动即
  • 5.mybatisPlus自定义SQL

    今日内容 MP自带的条件构造器虽然很强大 有时候也避免不了写稍微复杂一点业务的sql 比如多表查询 那么那么今天说说MP怎么自定义sql语句吧 另外 除了下文提到的通过queryWrapper实现筛选以外 调用查询时 如果你需要做分页 通过
  • SpringBoot-基础篇复习(全)

    本文包含SpringBoot基础篇的所有知识点 大家一起来学习吧 开启一段新的旅程 加油吧 springboot是由Picotal团队提供的全新框架 用来简化spring的搭建和开发过程的配置 因为spring的配置比较繁琐 故引入了spr
  • mybatisPlus 将List<String>字段转成json字符串,使用JacksonTypeHandler以及自定义类型处理器实现

    文章目录 场景 使用JacksonTypeHandler实现类型转换 自定义StringListTypeHandler处理器实现 场景 项目中经常需要将List转成json存储到配置文件中 mybatisPlus默认实现了JacksonTy

随机推荐

  • 模拟get和post请求

    一 模拟请求 浏览器及工具模拟 http请求有很多种 常用的请求方式有两种 get请求和post请求 今天先介绍浏览器以及工具模拟请求 下次会介绍代码模拟 1 get请求格式 url param1 value1 param2 value2
  • 阿里云OSS使用Java上传文件

    一 准备工作 1 1登录阿里云点击对象存储OSS 1 2 先点击Bucket 列表 在点击创建Bucket 1 3 根据自己需求勾选 然后点击确定 1 4 新建好之后 点击bucket名称 1 5 点击文件管理 1 6 在这个页面就可以实现
  • 常用正则表达式

    英文单词 public static final String REGEX WORD EN w 中文 public static final String REGEX WORD CN u4E00 u9FA5 6到30位 数字 字符 常用于用
  • 解决windows 您没有权限访问\\192.168.1.X(局域网) 请与网络管理员联系请求访问权限

    解决windows 您没有权限访问 192 168 1 X 局域网 请与网络管理员联系请求访问权限 今天哥们发来一张图 就是下图 说无法访问局域网内的数据了 这个问题咋处理 那就重头说这个事儿 先写一篇这个问题 正好本博客内还木有 出现这个
  • QueryWrapper查询查询时间空值排序空值放在最后

    代码如下 QueryWrapper
  • RFID智能汽车制造管理系统解决方案

    RFID智能汽车制造管理系统解决方案 1 项目背景 1 1 行业背景 在汽车行业快速发展竞争日益激励的背景下 各个汽车制造商都在追求管理系统的优化 已从开始的只追求最终结果的最优 发展到目前要求使制造汽车的每个环节都达到最优的目的 这就给管
  • 图像处理之卷积模式及C++实现

    1 卷积的三种模式 深度学习框架中通常会实现三种不同的卷积模式 分别是 SAME VALID FULL 这三种模式的核心区别在于卷积核进行卷积操作的移动区域不同 进而导致输出的尺寸不同 我们以一个例子来看这三种模式的区别 输入图片的尺寸是5
  • 服务器iis如何开启tlsv1.2协议,利用IIS Crypto V3.2开启IIS服务器TLS1.2的具体操作流程...

    今天客户给我反馈了一个在网站安装SSL证书后 网站https显示异常的问题 就是在谷歌浏览器下 会提示 您的连接存在安全隐患 访问被阻止 如下 如果继续强制浏览 会提示 你与此网站之间建立的连接并非完全安全 攻击者可能能够看到您正在此网站上
  • Command Prompt 常用命令

    一 CD Change Directory 改变现在指向的文件夹 1 去到最根的目录 cd 例如去到C盘 2 去某一文件夹 例如去C盘的logs文件夹 cd windows logs 3 返回上一级文件夹 cd 二 指向去另一个盘 指向另一
  • 解决PCCAD出现的致命错误Unhandled Access Violation ....

    最近公司电脑貌似很多的员工在打开pccad里面的TK的时候出现如下的界面 于是就开始认为是office的问题 在卸载了office之后 问题是解决了 不过总不能不叫员工使用office软件吧 于是乎不得不又装上了office 但是不是off
  • AD20-DRC检查

    点击下图中的红圈内选项 就会出现 第一个红圈可不勾选 可以不创建报告文件 第二个红圈中的填的稍微大一点 接下来就是 红圈中是安全间距检查 勾选可以检查板子中的安全间距 之后点击左下角的运行DRC 就行了 板子中有错误的话就会报错 有错改错就
  • adopt_lock 和 defer_lock 的区别

    c 中 lock guard 通过 raii 机制实现了自动上锁和解锁互斥量 基本用法为 static std mutex io mutex std lock guard
  • IDEA如何添加多Git源

    一 添加多Git源 选择IDEA顶部VCS菜单 再选择Git 点击Remotes 然后弹窗中点击 号添加 再弹窗中输入名字和git的地址 最后点击OK 另外一个Git源就加进来了 二 如何添加新的Git源的远程分支 选择IDEA顶部VCS菜
  • java搜索文本内容_JAVA 搜索文本文件中的关键字

    原文链接 http blog net blog abel article details 40858245 用JAVA实现对文本文件中的关键字进行搜索 依据每一行 得到每一行中出现关键词的个数 使用java io LineNumberRea
  • 如何理解js中基本数据类型的值不可变

    js的数据类型 在讲解我们要说明的问题之前 需要知道js有哪些数据类型 js有两种数据类型 基本数据类型和引用数据类型 基本数据类型 number string boolean undefined null symbol 在 Java 中
  • 入门学习-Python-小甲鱼学习资料-Day010-列表:一个打了激素的数组1

    标题 根据视频自己练习 Append 和 extend Appen 添加单个元素 extend添加多个元素 但是要以数组形式 Insert 插入元素的时候可以定义插入的位置 注意 是从0开始计数 从0开始才是python的默认 标题 课后练
  • java简单五子棋源代码

    package com renyou import java awt Color import java awt Dimension import java awt FlowLayout import java awt Graphics i
  • 与ln的指数转化公式_指数函数与对数函数的转换

    有时对数运算比指数运算来得方便 因此以指数形式出现的式子 可利用取对数的方法 把指数运算转化为对数运算 用高等数学计算的老旧的纹理古文纸 解题技巧 转化的思想是一个重要的数学思想 对数式与指数式有着密切的关系 在解决有关问题时 经常进行着两
  • Hive 调优总结

    1 通常 可以通过设置属性hive map aggr值为true来提高聚合的性能 hive map aggr true 这个设置会触发在map阶段的 顶级 聚合过程 非顶级的聚合过程将会在执行一个GROUP BY后进行 不过这个设置将需要更
  • Mybatis-Plus(一)

    Mybatis Plus 一 最近在项目当中学习到了一种新的构建sql查询的技术 mybatis plus 相交与之前使用的example即先创建一个example对象 再根据这个对象创建一个criteria对象来说 这种方式更为简洁方便