Mybatis Plus入门

2023-11-08

MyBatis Plus介绍

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生成器),可自由配置,完美解决主键问题

框架结构

Mybatis Plus使用

1.导入依赖

<dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>2.0.1</version>
</dependency>

2.MP整合的配置

<!-- 0.连接池属性设置读取指定的properties文件 -->
    <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true"/>
    
    <!-- 1.将连接池放入spring容器 -->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置实体扫描路径,多个package可以用分号; 逗号, 分隔, 支持通配符*-->
        <!-- com.a.b.entity;com.a.c.entity;com.d.*.entity-->
        <property name="typeAliasesPackage" value="cn.xm.jwxt.bean.*"/>
        <property name="configuration" ref="mybatisConfig"/>
        <!-- MP 全局配置注入 -->
        <property name="globalConfig" ref="globalConfig"/>
        <property name="plugins">
            <array>
                <!-- 分页插件配置 -->
                <bean id="paginationInterceptor"
                      class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"/>
                <!-- 性能拦截器,兼打印sql,不建议生产环境配置-->
                <bean id="performanceInterceptor"
                      class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor"/>
            </array>
        </property>
    </bean>

    <bean id="mybatisConfig" class="com.baomidou.mybatisplus.MybatisConfiguration">
        <property name="mapUnderscoreToCamelCase" value="true"/>
    </bean>

    <!-- 定义 MP 全局策略 -->
    <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
       
        <property name="idType" value="2"/>

        <property name="dbType" value="mysql"/>

        <!-- 全局表为下划线命名设置 true -->
        <property name="dbColumnUnderline" value="true"/>
    </bean>

    <!-- 配置mybatis 扫描mapper接口的路径, 相当于注解@MapperScan,@MapperScan("com.baomidou.mybatisplus.test.h2.entity.mapper")-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.xm.jwxt.mapper"/>
    </bean>

3.实体

@TableName(value="employee")
public
class Employee { private Integer id ; private String lastName; private String email ; private Integer gender; private Integer age ; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getGender() { return gender; } public void setGender(Integer gender) { this.gender = gender; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + ", age=" + age + "]"; } }

4.mapper 接口

public interface EmployeeMapper extends BaseMapper<Employee> {}

5.新增

@Test
public void testCommonInsert() {
    //初始化Employee对象
    Employee employee  = new Employee();
    employee.setLastName("MP");
    employee.setEmail("mp@atguigu.com");
    employee.setGender(1);
    //insert方法在插入时,会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现到SQL语句中
    Integer result = employeeMapper.insert(employee);
    System.out.println("result: " + result );
    //insertAllColumn方法在插入时,不管属性是否非空, 属性所对应的字段都会出现到SQL语句中.
    Integer result1 = employeeMapper.insertAllColumn(employee);
    System.out.println("result: " + result1 );
    //获取当前数据在数据库中的主键值
    Integer key = employee.getId();
    System.out.println("key:" + key );
}

6.修改

@Test
public void testCommonUpdate() {
    //初始化修改对象
    Employee employee = new Employee();
    employee.setId(7);
    employee.setLastName("王五");
    employee.setEmail("xz@sina.com");
    employee.setGender(0);
    //updateById方法在修改时,会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现到SQL语句中
    Integer result = employeeMapper.updateById(employee);
    System.out.println("result: " + result );
    //updateAllColumnById方法在修改时,不管属性是否非空, 属性所对应的字段都会出现到SQL语句中.
    Integer result1 = employeeMapper.updateAllColumnById(employee);
    System.out.println("result: " + result1 );
}

7.查询

@Test
public void  testCommonSelect() {
    //1. 通过id查询
    Employee employee = employeeMapper.selectById(7);
    System.out.println(employee);

    //2. 通过多个列进行查询。selectOne查询结果只能是一条,否则报错
    Employee  employee1 = new Employee();
    employee.setLastName("王五");
    employee.setGender(0);
    Employee result = employeeMapper.selectOne(employee1);
    System.out.println("result: " +result );

    //3. 通过多个id进行查询
    List<Integer> idList = new ArrayList<>();
    idList.add(4);
    idList.add(5);
    idList.add(6);
    idList.add(7);
    List<Employee> emps = employeeMapper.selectBatchIds(idList);
    System.out.println(emps);

    //4. 通过Map封装条件查询。map中的key是数据库中字段名
    Map<String,Object> columnMap = new HashMap<>();
    columnMap.put("last_name", "Tom");
    columnMap.put("gender", 1);
    List<Employee> emps1 = employeeMapper.selectByMap(columnMap);
    System.out.println(emps1);

    //5. 分页查询
    List<Employee> emps2 = employeeMapper.selectPage(new Page<>(3, 2), null);
    System.out.println(emps2);
}

8.删除

@Test
public void testCommonDelete() {
    //1 .根据id进行删除
    Integer result = employeeMapper.deleteById(13);
    System.out.println("result: " + result );

    //2. 根据条件进行删除
    Map<String,Object> columnMap = new HashMap<>();
    columnMap.put("last_name", "MP");
    columnMap.put("email", "mp@atguigu.com");
    Integer result1 = employeeMapper.deleteByMap(columnMap);
    System.out.println("result: " + result1 );

    //3. 批量删除
    List<Integer> idList = new ArrayList<>();
    idList.add(3);
    idList.add(4);
    idList.add(5);
    Integer result2 = employeeMapper.deleteBatchIds(idList);
    System.out.println("result: " + result2 );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis Plus入门 的相关文章

  • 校园网服务器系统需求分析,校园网的网络系统集成建设需求分析的主要工作

    下面以某校园网的网络系统集成建设为例 具体介绍在校园网建设中需求分析的主要工作 一 了解用户的基本情况 1 学校目前有教学楼4座 宿舍楼2座 图书馆1座 食堂1座 计算机中心1处 综合楼1座 人员约6000人 2 该校园网主要应用于学校内部
  • Windows下安装mysql-5.7.34的方法

    1 下载mysql 5 7 34 从mysql官网下载mysql 5 7 34 winx64 zip并解压到合适的位置 以D server mysql5 7 34 x64为例 2 创建配置文件my ini 创建文件D server mysq
  • Android SystemUI之StatusBar,状态栏(二)

    Android SystemUI系列 1 Android SystemUI之启动流程 一 2 Android SystemUI之StatusBar 状态栏 二 3 Android SystemUI之下拉菜单 通知栏 快捷面板 三 4 And
  • CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

    1 首先 检查已安装的jdk版本 sudo yum list installed grep java 2 移除 卸载圈红的系统自带的openjdk sudo yum remove java 1 7 0 openjdk x86 64 sudo
  • Obsidian学习笔记(一):插件Excalidraw创建图表

    Excalidraw作为Obisidian的绘图插件 可以制作流程图 思维导图等 结合Obsidian还能插入链接 从而将一个个卡片知识整理成一个系统的知识框架 在excel或者csv文件中 复制数据 直接粘贴到ob的excalidraw的
  • 斗鱼视频sign签名逆向分析

    本篇文章将带大家逐步定位sign生成的地方 如想学习相关知识 推荐b站的志远一二期逆向课程 志远一期逆向课程 关键词f0dabea01b3730 f0dabea01b3731 f0dabea01b3732 f0dabea01b373 直接搜
  • 来了!WSL 2 GUI 原生支持!

    参阅文献 https docs microsoft com zh cn windows wsl tutorials gui apps 先决条件 要在 Windows 上体验 WSL 2 GUI 应用 需要满足以下条件 Windows 10
  • 遥感影像分类任务的复现

    目录 一 概述 二 环境配置 三 运行 1 dataset 2 configs 代码下载地址 GitHub cxyth rs segment pytorch 用于遥感影像分类任务的语义分割模板工程 部分解码器下载地址
  • “那不勒斯”服务器芯片,那不勒斯定名 AMD发布全新CPU品牌EPYC

    在今天举行的2017年AMD财务分析师日活动上 AMD正式公布了旗下的全新一代服务器处理器品牌 EPYC EPYC系列产品此前代号为大家熟悉的 那不勒斯 Naples 最大核心数量为32核 支持超线程技术 可提供128条PCI E 3 0通
  • 用python实现西绪福斯黑洞(即123数字黑洞)的演示

    目录 一 123数字黑洞描述 二 问题解决 1 内容描述 2 实现思路 3 代码功能实现 1 分解输入的数字字符串 生成数字列表 2 由数字列表生成新的数字字符串 3 主程序实现输入和输出 三 完整代码 四 结果输出 1 验证前文的数据 2
  • sql server 2000:不能打开到主机的连接,在端口1433:连接失败

    来源 http topic csdn net u 20081104 20 fd1f1e2b 9350 43a4 9892 34a98a709216 html http hi baidu com sinber blog item a12e8d
  • Pycharm编程题——判断输入数字的奇偶

    输入一个数字 判断它是奇数还是偶数 num int input 请输入一个整数 if num 2 0 print num 是偶数 else print num 是奇数
  • 垃圾收集机制原理

    目录标题 1 可回收对象 1 引用计数算法 2 可达性分析算法 2 垃圾收集算法 1 标记 清除算法 2 复制算法 3 标记 整理算法 4 分代收集算法 3 新生代 老年代 4 什么时候GC回收对象 Java堆 Java Heap 是Jav
  • pandas 数据类型之 Series

    Python 官网 https www python org 这里 才 python 前沿 可惜是英文原版 所以 我要练习英文阅读 我的CSDN主页 My Python 学习个人备忘录 我的HOT博 老齐教室 自学并不是什么神秘的东西 一个
  • Scala 正则表达式

    Scala 正则表达式 Scala 通过 scala util matching 包中的 Regex 类来支持正则表达式 以下实例演示了使用正则表达式查找单词 Scala import scala util matching Regex o
  • chatglm docker镜像,一键部署chatglm本地知识库

    好久没有写文章了 今天有空 记录一下chatglm本地知识库的docker镜像制作过程 核心程序是基于 闻达 开源项目 稍作改动 镜像可以直接启动运行 大家感兴趣可以进入镜像内部查看 代码位于 app 目录下 一 制作镜像 docker t
  • ISTQB认证工程师学习笔记(5)——测试管理

    测试管理的学习目标 测试组织 测试计划和估算 测试监督与控制 配置管理 风险和测试 缺陷管理 测试组织 独立测试 测试任务可以由具体指定的测试人员完成 也可以由其他角色人员完成 比如客户 由于作者和测试员的认知取向不同 一定程度的独立性可以
  • SpringCloud Alibaba Nacos作为配置中心不生效问题

    在使用Springcloud Alibaba 的Nacos作为配置中心时 遇到了在配置中心中提交相关配置后但配置还是从本地获取 没有从nacos中获取的情况 可能是如下原因导致 1 需要自行新建bootstrap properties并配置
  • 人工稚能之sklearn分类

    分类算法和聚类比较类似 都是将输入数据赋予一个标签类别 区别是分类算法的分类是预先确定的 有明确含义的 而聚类的标签是从输入数据本身的分布中提取出来的一种抽象的类别 聚类是无监督算法 而分类是有监督的 除了输入数据x外 还有标签y 分类算法
  • WSL 更新NVIDIA 驱动 安装CUDA

    WSL 一定要使用WSL2 我选择的linux系统是ubuntu22 04 在微软应用商店安装的 安装完成之后可以通过 wsl l v查看 NVIDIA 驱动 WSL 中不要直接安装linux版的显卡驱动 而是需要在windows中安装驱动

随机推荐

  • 动态知识图补全问题

    4 19 4 23 动态信息 1 Dual Quaternion Knowledge Graph Embeddings 本文应该是静态方法 距离公式和旋转公式的一个统一框架 提出一个新的映射空间 Dual Quaternion space
  • 民数记研读1——于宏洁

    民数记研读 于宏洁 1 西乃山下 一 第一次数点百姓 二 各支派安营 三 前行 四 银号 2 几种重要的人 一 利未人 二 拿细耳人的条例 三 首领 3 管与教 一 从荣耀角度来看神的管教 二 在神的管教中 要注意的几个点 三 民数记中十次
  • Apple 的 plist 编辑器入门指南:基础操作与高级功能详解

    PlistEdit Pro是一款专为macOS编写的最高级属性列表Plist编辑器 对于Mac和IOS开发人员来说 编写应用程序时必须编辑各种列表文件 PlistEdit Pro通过提供直观且功能强大的界面 使编辑这些文件更加容易 它不仅能
  • 深度学习机器学习目标检测

    一 目标检测 1 深度学习开发流程 2 应用案例 3 目标检测算法基本流程 二 机器学习 1 机器学习算法能解决那些问题 分类问题 图像识别 垃圾邮件识别 回归问题 各种预测 房价 天气 股价等等 排序问题 推荐 点击率排序 生成问题 图像
  • 完全卸载Android Studio(卸载得干干净净)

    步骤其实很简单 一共三步 但是每一步都需要完成 步骤如下 打开控制面板或腾讯软件管家等执行常规的卸载操作 找到SDK的安装目录手动删除SDK 进入 C Users lt 你的用户名下 gt 目录下 手动删除 android AndroidS
  • github 创建分支,本地代码上传github 服务器上

    git分布式版本控制系统 我第一个接触的版本控制系统是svn 当时觉得版本控制就是这样 直到我遇到了git git是分布式版本控制系统 合适分布式开发 强调个体 速度快 灵活 代码冲突了也比较好解决 最让我喜欢的还是git的分支切换 在gi
  • Python学习.第五天.列表

    Python学习 第五天 列表 前言 一 列表的创建与删除 二 列表的查询操作 1 index 如果查询时列表中存在n个相同元素 只返回元素中的第一个元素的索引 2 获取列表中的单个元素 3 获取列表中的多个元素 4 判断指定元素在列表中是
  • 目标检测之EfficientNet

    本文参考以下链接 如有侵权 联系删除 参考链接 论文 EfficientNet Rethinking Model Scaling for Convolutional Neural Networks EfficientNet Rethinki
  • 获取assert目录下文件名及读取

    从assert文件下获取文件名字 String fl1 getAssets list 第一层 得到数据 images hello txt String fl1 getAssets list 第一层 第二层 得到数据 helloworld t
  • IDEA+MAVEN 打jar包

    目录 一 分类 二 胖包 三 瘦包 一 分类 jar包是分为胖包和瘦包 何为胖包 何为瘦包 首先胖包指的是带依赖的jar包 瘦包就是没有依赖的jar包 二 胖包 1 在pom xml添加如下Maven插件
  • el-select 结合 el-checkBox 实现下拉全选+多选功能

    实现效果如图所示 具体代码如下
  • RabbitMQ重复消费

    造成重复消费的原因 MQ向消费者推送message 消费者向MQ返回ack 告知所推送的消息消费成功 但是由于网络波动等原因 可能造成消费者向MQ返回的ack丢失 MQ长时间 一分钟 收不到ack 于是会向消费者再次推送该条message
  • 每日一题(day1)

    题目链接 方法一 使用栈进行中序遍历 class Solution public int kthSmallest TreeNode root int k stack
  • 决策树算法处理分类及回归问题的原理及python代码实现

    1 决策树原理介绍 通俗的理解 决策树就是对样本集根据某一个维度d和某一个阈值v进行二分 得到二叉树 即为决策树 通过样本训练计算出维度d和阈值v 即可对预测数据进行分类 如果对二叉树的各子节点value值求平均 将平均值赋予待分类样本 即
  • 疯壳-鸿蒙OS单板应用程序开发

    鸿蒙OS单板应用程序开发 疯壳 出品 a 在源码根目录下新建一个testapp的文件夹 在终端输入 mkdir testapp 指令新建一个名为testapp 的文件夹如下 b 进入testapp文件夹 新建一个名为my first app
  • 一个用于拷贝文件并判断是否拷贝成功的批处理文件

    echo off chcp 65001 copy E opencv build x64 vc15 bin opencv videoio ffmpeg420 64 dll windir set err ERRORLEVEL IF err 1
  • pear文件利用 (远程文件下载、生成配置文件、写配置文件) 从一道题看——CTFshow私教 web40

    web40 考点 pear文件包含 pear是PHP的一个扩展 条件 1 有文件包含点 2 开启了pear扩展 可以当他是一个框架 3 配置文件中register argc argv 设置为On 而默认为Off SERVER argv 生效
  • Vue脚手架的创建步骤

    vue cli脚手架 案例一 案例二 一 脚手架简介 Vue脚手架是Vue官方提供的标准化开发工具 开发平台 它提供命令行和UI界面 方便创建vue工程 配置第三方依赖 编译vue工程 1 webpack 前端项目工程化的标志之一就是引入了
  • Robot Arm 机械臂源码解析

    Robot Arm 机械臂源码解析 说明 Robot Arm是我复刻 也是玩的第一款机械臂 用的是三自由度的结构 你可以理解为了三个电机 三轴有自己的一些缺陷 相比于六轴机械臂而言因为结构的缺陷 不能达到空间内的一些点 这些点又叫做奇异点
  • Mybatis Plus入门

    MyBatis Plus介绍 MyBatis Plus 简称MP 是国内人员开发的 MyBatis 增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 特征 无侵入 Mybatis Plus 在 Mybatis