SpringBoot框架中Mybatis-plus的简单使用操作汇总

Mybatis-plus

官网地址:https://baomidou.com/

配置mysql

在配置文件连接mysql

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/cat_house?serverTimezone=GMT%2B8
spring.datasource.username=username
spring.datasource.password=password

# mybatis日志(控制台能显示SQL语句)
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

Mybatis-plus使用方式

依赖导入

<!-- mybatis驱动 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

lombok依赖导入

<!-- lombok用来简化实体类 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

Mybatis-plus实现简单的CURD操作

准备表格(数据库有相应的表格)

准备实体(实体文件夹中有相应的实体类)

package com.xsha.boot.entity;
import lombok.Data;
@Data
public class Topic {
    private int id;
    private String title;
    private String time;
    private int count;
    private int version;
}

准备映射文件(映射文件夹中有相应的映射接口)

package com.xsha.boot.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xsha.boot.entity.Topic;
import org.springframework.stereotype.Repository;
@Repository
public interface TopicMapper extends BaseMapper<Topic> {
}

测试操作(在test类中进行简单的单元测试)

package com.xsha.boot;

import com.xsha.boot.entity.Topic;
import com.xsha.boot.mapper.TopicMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class MainApplicationTest {
    @Autowired
    // 可在指定的接口上添加注解Repository,就不会爆红了
    private TopicMapper topicMapper;
    // 查询所有数据
    @Test
    public void findAll() {
        List<Topic> topics = topicMapper.selectList(null);
        for (int i = 0; i < topics.size(); i++) {
            System.out.println(topics.get(i));
        }
    }
    // 添加操作
    public void addTopic() {
//        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//        Date date = new Date();
        Topic topic = new Topic();
        topic.setTitle("SSM框架整合了哪些主流框架");
        // 时间的添加可以采用mybatis-plus框架实现,可查看Controller中接口实现和实体类属性的注解
//        topic.setTime(ft.format(date));
        int row = topicMapper.insert(topic);
        System.out.println("添加的行数:"+row);
    // 修改操作
    public void updateTopic() {
        topic.setId(20);
        topic.setCount(10);
        int row = topicMapper.updateById(topic);
        System.out.println("修改的行数"+row);
}

Mybatis-plus自动填充策略

主键自动填充

// 可以在id属性上添加TableId注解可以修改id唯一键值的策略(自动填充),如@TableId(type=IdType.AUTO)
// @TableId(type=IdType.ID_WORKER) 生成19位唯一数字的键值
// @TableId(type=IdType.ID_WORKER_STR) 生成19位唯一字符串的键值
private int id;

时间自动填充

实体类属性添加注解

// 采用mybatis-plus框架的策略自动填充时间
// @TableField(fill=FieldFill.INSERT)  表示自动填充创建时间
// @TableField(fill=FieldFill.INSERT_UPDATE) 表示自动填充更新时间
@TableField(fill = FieldFill.INSERT)
private String time;

Controller类继承接口实现时间自动填充方法

package com.xsha.boot.controller;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class MyMetaObjectController implements MetaObjectHandler {
    // 使用mybatis-plus实现添加操作,这个方法自动调用
    @Override
    public void insertFill(MetaObject metaObject) {
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = new Date();
        // 第一个参数不是表格的字段名称,而是实体类的属性名称
        this.setFieldValByName("time", ft.format(date), metaObject);
    }
    // 使用mybatis-plus实现更新操作,这个方法自动调用
    public void updateFill(MetaObject metaObject) {
        // 更新时间可根据需求实现
}

乐观锁的具体实现

  • 表格添加字段version,作为乐观锁版本号
  • 对应实体类添加版本号属性,并且在属性上面添加注解Version(baomidou下的Version)
  • 在配置类中添加乐观锁插件
@Configuration
@MapperScan("com.xsha.boot.mapper")
public class MyConfig {
    // 乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

Mybatis-plus查询操作(简单)

// 单个id查询
@Test
public void selectTopic() {
    Topic topic = topicMapper.selectById(20);
    System.out.println(topic);
}

// 多个id批量查询
@Test
public void selectTopics() {
    List<Topic> topics = topicMapper.selectBatchIds(Arrays.asList(1, 2, 3, 4));
    for (int i = 0; i < topics.size(); i++) {
        System.out.println(topics.get(i));
    }
}

Mybatis-plus实现分页操作

在配置类中配置分页插件

// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

编写分页代码

// 分页查询
@Test
public void selectByPage() {
    // 1.创建page对象,传递当前页和每页记录数的两个参数
    Page<Topic> page = new Page<>(1, 3);
    // 2.调用mybatis-plus分页查询的方法,把分页所有的数据封装到page对象里面,第二个参数是条件
    topicMapper.selectPage(page, null);
    // 3.通过page对象获取分页数据
    System.out.println(page.getCurrent());  // 当前页
    System.out.println(page.getRecords());  // 每页数据list集合
    System.out.println(page.getSize());  // 每页显示记录数
    System.out.println(page.getTotal());  // 总记录数
    System.out.println(page.getPages());  // 总页数
    System.out.println(page.hasNext());  // 是否有下一页
    System.out.println(page.hasPrevious());  // 是否有上一页
}

Mybatis-plus删除操作(简单)

物理删除

 // 单个id删除
    @Test
    public void deleteTopic() {
        int row = topicMapper.deleteById(20);
        System.out.println(row);
    }

    // 多个id批量删除
    @Test
    public void deleteTopics() {
        int rows = topicMapper.deleteBatchIds(Arrays.asList(1, 2, 3, 4));
        System.out.println(rows);
    }

逻辑删除

表格中添加标志位字段,供逻辑删除使用

表格字段设置默认值,就不能使用mybatis-plus的自动填充使用mybatis-plus的自动填充

使用mybatis-plus的自动填充时,在实体类属性上添加TableLogic注解

@TableLogic
private int delete;

在配置类中配置逻辑删除插件

// 逻辑删除插件
@Bean
public ISqlInjector sqlInjector() {
    return new LogicSqlInjector();
}

在配置文件中添加逻辑删除与否的默认值(可有可无)

# 逻辑删除与否的默认值
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

代码编写

// 逻辑删除
@Test
public void logicDeleteTopic() {
    int row = topicMapper.deleteById(21);
    System.out.println(row);
}

注意:采用mybatis-plus的逻辑删除方式时,之后查询数据时就不会包括逻辑删除的数据

性能分析

在配置类中添加性能分析插件

/**
 * SQL执行性能分析插件
 * 开发环境使用,线上不推荐。maxTime指的是sql最大执行时长
 *
 * 三种环境:dev开发环境、test测试环境、prod生成环境
 * @return
 */
@Bean
@Profile({"dev", "test"})   // 设置dev,test的环境开启
public PerformanceInterceptor performanceInterceptor() {
    PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    performanceInterceptor.setMaxTime(100); // 数值单位为毫秒ms
    performanceInterceptor.setFormat(true);
    return performanceInterceptor;
}

在配置文件中配置环境

# 环境设置:dev  test  prod
spring.profiles.active=dev

Mybatis-plus实现复杂条件查询

使用QueryWrapper类对象构造条件(还有其他的)

// mybatis-plus实现复杂查询
@Test
public void querySelect() {
    // 1.创建QueryWrapper对象
    QueryWrapper<Topic> queryWrapper = new QueryWrapper<>();
    // 2.通过QueryWrapper设置条件
    // ge(>=)、gt(>)、le(<=)、lt(<)
    queryWrapper.ge("count", 3);
    List<Topic> topics1 = topicMapper.selectList(queryWrapper);
    System.out.println("FIRST");
    System.out.println(topics1);

    // eq(==)、ne(!=)
    queryWrapper.ne("deleted", 0);
    List<Topic> topics2 = topicMapper.selectList(queryWrapper);
    System.out.println("SECOND");
    System.out.println(topics2);
    // between(在···和···之间)
    queryWrapper.between("time", "2021-10-12 07:05:29.546779", "2021-10-27 15:02:09.458571");
    List<Topic> topics3 = topicMapper.selectList(queryWrapper);
    System.out.println("THIRD");
    System.out.println(topics3);
    // like(模糊查询)
    queryWrapper.like("title", "SSM");
    List<Topic> topics4 = topicMapper.selectList(queryWrapper);
    System.out.println("FORTH");
    System.out.println(topics4);
    // 排序 orderByDesc   orderByAsc
    queryWrapper.orderByDesc("count");
    List<Topic> topics5 = topicMapper.selectList(queryWrapper);
    System.out.println("FIFTH");
    System.out.println(topics5);
    // 指定要查询的列 last拼接sql语句
    queryWrapper.select("id", "title", "count");
    queryWrapper.last("limit 2");
    List<Topic> topics6 = topicMapper.selectList(queryWrapper);
    System.out.println("SIXTH");
    System.out.println(topics6);
}

到此这篇关于SpringBoot框架中Mybatis-plus的简单使用的文章就介绍到这了,更多相关SpringBoot Mybatis-plus使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用springboot整合mybatis-plus实现数据库的增删查改示例

    1.准备数据库中的表及表中的数据 /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.6.11 : Database - mp ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQ

  • SpringBoot使用Mybatis&Mybatis-plus文件映射配置方法

    简介: Springboot使用Mybatis&Mybatis-plus 两者文件映射配置略有不同,之前我用的是Mybatis,但公司用Mybatis-plus:自己新建了一个Springboot项目,代码运行时一直报错not found not found,明明配置了mybatis相关信息的扫描路径,但是就是not found:检查修改了很多地方但都是无用功,最终发现是Plus惹的祸. 1.使用Mybatis <dependency> <groupId>org.mybat

  • SpringBoot项目使用mybatis-plus逆向自动生成全套代码

    目录 1.在你的SpringBoot项目下新建子模块项目 2.在此模块下新建一个包与一个java类 类名: CodeGenerator 3.在 resources 下新建 文件夹,用来存放 mapper文件 4.配置CodeGenerator类 5.启动代码生成类main方法 6.删除文件 1.在你的SpringBoot项目下新建子模块项目 pom.xml添加以下依赖: <properties> <java.version>1.8</java.version> <

  • springboot+mybatis-plus实现内置的CRUD使用详解

    springboot+mybatis-plus实现内置的CRUD使用详情,具体修改删除操作内容后文也有详细说明 mybatis-plus的特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD操作:内置通用 Mapper.通用Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 支持 Lambda形式调用:通过 Lambda 表达式,方

  • IDEA项目使用SpringBoot+MyBatis-Plus的方法

    步骤如下: 1.打开IDEA 2.File->new-> project 3.选择spring initializr->Next 4.填写Grouphe和Artifact,选择Java version: 8 ,点击next ,如图: 5.选择对应的依赖,点击Next 6.核对项目的名字是否一致,点击finish后就完成了工程的创建. 7.接下来就是pom文件的依赖包引入了(很重要!!!) <dependency> <groupId>org.springframew

  • SpringBoot框架中Mybatis-plus的简单使用操作汇总

    Mybatis-plus 官网地址:https://baomidou.com/ 配置mysql 在配置文件连接mysql spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/cat_house?serverTimezone=GMT%2B8 spring.datasource.username=username spring.da

  • SpringBoot框架整合Mybatis简单攻略

    目录 步骤 1 添加mybatis-starter依赖 步骤 2 如何配置mybatis到SpringBoot项目 步骤 3 测试查询 步骤 4 mybatis注解方式 步骤 5 用注解方式做一个新增操作 步骤 6 整合PageHelper分页插件 步骤 7 拓展知识:mybatis四种传参方式 步骤 8 Mybatis中#{}和${}的区别是什么? 步骤 9 Mybatis中模糊查询like语句该怎么写? 步骤 10 SpringBoot整合Mybatis-plus 步骤 11 Mybatis

  • MyBatis框架中mybatis配置文件详细介绍

    一.注册DB连接四要素属性文件 <propertiesresource="jdbc.properties"/> 二.将指定包中所有类的简单类名当作其别名 <typeAliases> <packagename="com.bjpowernode.beans"/> </typeAliases> 三.配置运行环境 <environmentsdefault="testEM"> <enviro

  • YII2框架中ActiveDataProvider与GridView的配合使用操作示例

    本文实例讲述了YII2框架中ActiveDataProvider与GridView的配合使用操作.分享给大家供大家参考,具体如下: YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句. 配合强大的GridView,快速的显示我们想要的数据. 通过上面的两个工具,我们快速的显示用户表信息.用户表结构如下: 我们创建一个用户模型MyUser.php,代码如下: <?php namespace ap

  • Java的MyBatis框架中MyBatis Generator代码生成器的用法

    关于Mybatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器 MyBatis 和 iBATIS. 他可以生成Mybatis各个版本的代码,和iBATIS 2.2.0版本以后的代码. 他可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象. 这样和数据库表进行交互时不需要创建对象和配置文件. MBG的解决了对数据库操作有最大影响的一些简单的CRUD(插入,查询,更新,删除)操作. 您仍然需要对联合查询和存储过程手写SQL

  • SpringBoot项目中控制台日志的保存配置操作

    SpringBoot 控制台日志的保存配置 情景:SpringBoot项目中需要把控制台日志保存下来. 实现方法: 1.在配置文件application-prod.yml 配置如下: logging: config: classpath:logback-spring-prod.xml 2.logback-spring-prod.xml 这个文件是记录控制台打印日志保存的路径配置如下: <?xml version="1.0" encoding="UTF-8"?&

  • Python的Flask框架中Flask-Admin库的简单入门指引

    Flask-Admin是一个功能齐全.简单易用的Flask扩展,让你可以为Flask应用程序增加管理界面.它受django-admin包的影响,但用这样一种方式实现,开发者拥有最终应用程序的外观.感觉和功能的全部控制权. 本文是关于Flask-Admin库的快速入门.本文假设读者预先具有一些Flask框架的知识. 介绍 初始化 增加视图 身份验证 生成URL 模型视图 文件管理 介绍 这个库打算做到尽可能的灵活.并且开发者不需要任何猴子补丁就可以获得期望的功能. 这个库使用一个简单而强大的概念-

  • 在Python的Django框架中simple-todo工具的简单使用

    缘起 simple-todo最早是web.py一个中文教程的例子.后来Uliweb的作者limodou 认为这个教程很不错,于是有了Uliweb版的simple-todo.接着又有了Bottle版和Flask版.这俨然成了一个FrameworksShow项目.既然是FrameworksShow, 那Django的总不应当缺了吧. simple-todo: 一个简易的 todo 程序 http://simple-is-better.com/news/309 Simple Todo (Uliweb

  • 在Java的Hibernate框架中对数据库数据进行查询操作

    Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据库执行操作. 虽然可以直接使用SQL语句和Hibernate使用原生SQL,但建议使用HQL尽可能避免数据库可移植性的麻烦,并采取Hibernate的SQL生成和缓存策略的优势. 都像SELECT,FROM和WHERE等关键字不区分大小写,但如表名和列名的属性是区分在HQL敏感. FROM 语句 使

  • JavaScript的Polymer框架中dom-repeat与VM的相关操作

    各种框架都有把一个列表数据绑定到 DOM 上的功能,比如 Angular 会用 ng-repeat 来绑定.那么 Polymer 呢?其实这个级别的功能属于框架的扩展功能了,Angular 的 ng-repeat 也只是个 Directive 而已.Polymer 的 dom-repeat 也是这个级别的东西. 在 Polymer 中,一切都是 Directive 的概念.dom-module 用于定义模块,它本身也是一个 Directive.dom-repeat 也是,但它不是一个标签,而是一

随机推荐