首页 > 其他分享 >Mybatis-Plus简单使用,轻松上手

Mybatis-Plus简单使用,轻松上手

时间:2022-10-23 11:12:04浏览次数:60  
标签:Plus mybatisplus 轻松 baomidou org Mybatis import com public

1.介绍

MyBatis-Plus是一个 MyBatis 的增强工具。

特性:

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

 

框架结构

    

官方文档详细介绍:https://baomidou.com/

 

2.使用步骤

2.1使用的maven工程,在pom文件引入MyBatis-Plus坐标。

<!-- lombok 代码简化 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>provided</scope>
        </dependency>
<!-- mybatis-plus 所需依赖  -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
 
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
 
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
 
        <!-- 开发热启动 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
 
        <!-- MySQL连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

tips:

  mybatis-plus-boot-starter:核心的应用包
  mybatis-plus-generator、freemarker:逆向生成的工具类,生成mapper, service,controller。

 

2.2 编写 MybatisPlusGenerator工具类


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import java.util.Collections;

/**
 * @className: MybatisPlusGenerator
 * @description:
 * @author: 沙漏倒装回忆1024
 * @date: 2022-10-23 10:19
 */
public class MybatisPlusGenerator {
    public static void main(String[] args) {
        //数据库链接配置
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/springboot_learning?useUnicode=true&useSSL=false&characterEncoding=utf8", "root", "root")
                .globalConfig(builder -> {
                    builder.author("沙漏倒装回忆1024") // 设置作者
                            //.enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(System.getProperty("user.dir")+"/src/main/java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.lsqingfeng") // 设置父包名
                            .moduleName("springboot") // 设置父包模块名
                            // .service()  // 设置自定义service路径,不设置就是默认路径
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") +"/src/main/resources/mapper/")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("table_name") // 设置需要生成的表名
                            .addTablePrefix("t_", "c_")
                            // 设置自动填充的时间字段
                            .entityBuilder().addTableFills(
                                    new Column("create_time", FieldFill.INSERT),new Column("update_time", FieldFill.INSERT_UPDATE))
                    ; // 设置过滤表前缀
 
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}

 

2.3添加配置

a.启动类上添加一个Mapper扫描的注解MapperScan,用来配置需要扫描的mapper包所在的位置。

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @className: SpringBootApplication
 * @description: springboot启动类
 * @author: 沙漏倒装回忆1024
 * @date: 2022-10-23 14:36
 */
@SpringBootApplication
@MapperScan("com.项目路径.mapper")
public class SpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

b.添加Mybatis-Plus中的分页功能,加入分页拦截器的配置。

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * @className: MybatisPlusConfig
 * @description:
 * @author: 沙漏倒装回忆1024
 * @date: 2022-10-23 14:55
 */
@Configuration
public class MybatisPlusConfig {
    /**
     * 老版本,目前已失效
     * @return
     */
    /**@Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }*/
 
 
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

c.自动填充create_time和update_time的配置类,配合实体类使用。

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
 
import java.time.LocalDateTime;
 
/**
 * @className: MyMetaObjectHandler
 * @description:
 * @author: 沙漏倒装回忆1024
 * @date: 2022-10-23 14:57
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill...");
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
 
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill...");
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}
/**
 * 创建时间
 */
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
 
/**
 * 更新时间
 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

tips:请注意本文中代码没有指定package,因为每个项目的路径都不一样!

 

笔者: 沙漏倒装回忆1024

出处https://www.cnblogs.com/lpan1024/

版权所有,欢迎保留原文链接进行转载!

请点赞关注留言,如果有任何建议也可以留言,因为我会回复每一条评论,感谢阅读。

 

标签:Plus,mybatisplus,轻松,baomidou,org,Mybatis,import,com,public
From: https://www.cnblogs.com/lpan1024/p/16818032.html

相关文章

  • AtCoder Regular Contest 100 E-Or Plus Max
    DescriptionThereisanintegersequenceoflength\(2^N\):\(A_0,A_1,...,A_{2^N-1}\).(Notethatthesequenceis0-indexed.)ForeveryintegerKsatisfying......
  • Mybatis 复杂查询多对一 和 一对多
    多对一的处理:<!--方法一根据结构查询联表--><selectid="getStudent2"resultMap="StudentTeacher2">selects.idsid,s.namesname,t.nametnamefro......
  • (数据科学学习手札145)在Python中利用yarl轻松操作url
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,在诸如网络爬虫、web应用开发等场景中,我们需要利......
  • 12. MyBatis的逆向工程
    一、什么是MyBatis逆向工程  正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。  逆向工程:先创建数据库表,由框架负责根据数......
  • 02,mybatise批量插入
    SqlSessionsession=sqlSessionFactory.openSession(ExecutorType.BATCH);try{SimpleTableMappermapper=session.getMapper(SimpleTableMapper.class);Listrecor......
  • mybatis——在idea中使用
    新建一个空工程:File-——new——-project——-EmptyProject——-next-——填入项目名——Finish——newWindow(启动新窗口)创建mybatis下面第一个模块:module——点击:+—......
  • MyBatis基础使用五
    MyBatis基础使用五MyBatis缓存(了解即可,现在主流的缓存通过redis)MyBatis的一级缓存一级缓存是SqlSession级别的,通过同一个SqlSession查阅的数据会被缓存,下次查阅相同的数......
  • 轻松下载k8s.gcr.io,gcr.io,quay.io镜像
    目录一.系统环境二.前言三.使用现成的镜像代理仓库下载镜像3.1使用阿里云镜像仓库3.2使用lank8s.cn镜像仓库3.3使用中科大镜像一.系统环境服务器版本docker软件版......
  • 【Oracle数据库】Oracle SQL*Plus环境下的简单操作
     OracleSQL*Plus环境与查询 (1)登录到Oracle   (2)helpindex查看Oracle有关命令   (3)创建登录表  (4)插入数据  (5)查询所有数据   (6)设置列的显示格式     ......
  • 用好 DIV 和 API,在前端系统中轻松嵌入数据分析模块
    在数字化转型潮流席卷各大行业的今天,越来越多的企业开始重视BI(商业智能)技术的部署和应用,期望从不断增长的数据资源中获得更多业务价值,从而提升利润、控制风险、降低成本。B......