MyBatis-Plus 01入门

news2025/7/14 18:20:52

参考网站

官网:http://mp.baomidou.com

参考教程:http://mp.baomidou.com/guide/

一、简介

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

  • 润物无声

    • 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
  • 效率至上

    • 只需简单配置,即可快速进行 CRUD 操作,从而节省大量时间。
  • 丰富功能

    • 热加载、代码生成、分页、性能分析等功能一应俱全。

二、创建并初始化数据库

1、创建数据库

mybatis_plus

2、创建 User

其对应的数据库 Schema 脚本如下:

CREATE DATABASE  `prod-server` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
use `prod-server`;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下:

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@ccut.com'),
(2, 'Jack', 20, 'test2@ccut.com'),
(3, 'Tom', 28, 'test3@ccut.com'),
(4, 'Sandy', 21, 'test4@ccut.com'),
(5, 'Billie', 24, 'test5@ccut.com');

三、确认idea配置

1、打开配置

请添加图片描述

2、Java编译器

请添加图片描述

3、项目和文件的编码

请添加图片描述

4、Maven配置

请添加图片描述

四、创建项目

1、初始化工程

使用 Spring Initializr 快速初始化一个 Spring Boot 工程

Group:cn.qiang

Artifact:mybatis_plus

版本:2.7.5

在这里插入图片描述

2、引入依赖

**注意:**引入 MyBatis-Plus 之后请不要再次引入 MyBatis,以避免因版本差异导致的问题。

请添加图片描述

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!--mybatis-plus-->
   <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
    <!--mysql运行时依赖-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!--lombok用来简化实体类-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
      <!-- 代码生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
    
         <!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
    
</dependencies>

3、idea中安装lombok插件

(1)idea2020 版本 默认安装

请添加图片描述

(2)idea2019版本

请添加图片描述

(3)idea2018版本

请添加图片描述

**五、编写代码 **

1、配置

application.properties 配置文件中添加 MySQL 数据库的相关配置:

spring boot 2.0(内置jdbc5驱动)

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

spring boot 2.1及以上(内置jdbc8驱动)

**注意:**driver和url的变化

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://216.127.254.155:3166/prod-server?serverTimezone=GMT%2B8&characterEncoding=utf-8
    username: root
    password: root

注意:

1、这里的 url 使用了 ?serverTimezone=GMT%2B8 后缀,因为8.0版本的jdbc驱动需要添加这个后缀,否则运行测试用例报告如下错误:

java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more

2、这里的 driver-class-name 使用了 com.mysql.cj.jdbc.Driver ,在 jdbc 8 中 建议使用这个驱动,否则运行测试用例的时候会有 WARN 信息

2、主类

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

@SpringBootApplication
@MapperScan("cn.qiang")
public class MybatisPlusApplication {
    ......
}

3、实体

补充利用代码生成器

    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.username}")
    private String userName;

    @Value("${spring.datasource.password}")
    private String password;



    @Test
    void contextLoadsTest() {
        String projectPath = System.getProperty("user.dir")+"/src/main/java";
        FastAutoGenerator.create(url, userName, password)
                .globalConfig(builder -> {
                    builder.author("凡尔赛mo") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(projectPath); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("cn.qiang") // 设置父包名
                            .moduleName("practice") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath)); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("t_user") // 设置需要生成的表名
                            .addTablePrefix("t_", "c_")// 设置过滤表前缀
                            .controllerBuilder().enableRestStyle().enableHyphenStyle()
                            .entityBuilder().enableLombok().enableChainModel().addTableFills(
                            new Column("create_time", FieldFill.INSERT),
                            new Column("update_time", FieldFill.INSERT_UPDATE)
                    ).build();
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();

    }
    @Resource
    private UserMapper userMapper;
    @Test
    void contextLoadsTestMybatus() {
        //UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper
        //所以不填写就是无任何条件
       /* List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);*/

    }


    @Test
    void autocode() {
        // 最开始是配置数据源,postgresql还得指定架构,这里我就指定了用test架构
        FastAutoGenerator.create(new DataSourceConfig.Builder(url, userName, password))
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("凡尔赛mo") // 设置作者
                            .enableSwagger() // 开启 swagger 模式(根据数据库的注释等生成swagger的注解,真的牛)
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录
                            .disableOpenDir() // 生成后不打开资源管理器
                            .dateType(DateType.ONLY_DATE) // 时间类型
                            .commentDate("yyyy-MM-dd hh:mm:ss"); // 时间格式
                })
                // 包配置,也就是生成哪些文件夹
                .packageConfig(builder -> {
                    builder.parent("cn.qiang") // 设置父包名 也就是生成在输出目录的 com/yangsf下
                            .moduleName("mybatisplus") // 设置父包模块名 也就是代码放在com/yangsf/mybatisplus下
                            .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir")+"/src/main/resources/mapper")) // 设置mapperXml生成路径
                            .service("service") // 接下来的几个都是包名,也就是对应的代码的存放目录
                            .entity("entity")
                            .mapper("mapper")
                            .controller("controller")
                            .xml("mapper")
                            .other("utils");
                })
                // 策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("user") // 这里填数据库表名,可以填多个,用’,‘隔开
                            .addTablePrefix("ds_") // 忽略前缀
                            // mapper(dao)层的配置
                            .mapperBuilder()
                            .formatMapperFileName("%sMapper") // 生成的文件名都叫xxxmapper(根据表名)
                            .enableMapperAnnotation()   //开启@mapper注解
                            .superClass(BaseMapper.class) // 继承BaseMapper类
                            .formatXmlFileName("%sMapper")   // 生成对应的xml都叫xxxmapper
                            // service层配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImpl")
                            // 实体类配置
                            .entityBuilder()
                            .idType(IdType.AUTO) // 主键的策略,我选的是自增
                            .enableLombok() //开启 Lombok
                            .enableChainModel()
/*
                            .disableSerialVersionUID()  //不实现 Serializable 接口,不生产 SerialVersionUID
*/
                            .logicDeleteColumnName("deleted")   //逻辑删除字段名
                            .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命
                            .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命
                            .addTableFills(
                                    new Column("create_time", FieldFill.INSERT),
                                    new Column("update_time", FieldFill.INSERT_UPDATE)
                            )   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间,到时候需要编写具体的代码实现
                            .enableTableFieldAnnotation()     // 开启生成字段注解
                            // controller层配置
                            .controllerBuilder()
                            .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
                            .enableRestStyle();  //开启生成 @RestController 控制器
                })
                // 模板引擎配置 ,默认是Velocity
                .templateEngine(new FreemarkerTemplateEngine())
                .execute(); // 执行
    }

创建包 entity 编写实体类 User.java(此处使用了 Lombok 简化代码)

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

查看编译结果

请添加图片描述

4、mapper

创建包 mapper 编写Mapper 接口: UserMapper.java

public interface UserMapper extends BaseMapper<User> {
    
}

5、测试

添加测试类,进行功能测试:

package cn.ccut.mybatis_plus;
@SpringBootTest
class MybatisPlusApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    void testSelectList() {
        //UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper
        //所以不填写就是无任何条件
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }
}

注意:

IDEA在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确的执行。

为了避免报错,可以在 dao 层 的接口上添加 @Repository 注

通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

查看控制台输出:
请添加图片描述

6、查看sql输出日志

#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus:
  configuration:
  # 查看sql输出日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试用例设计方法之等效类,边界值

概念&#xff1a; 等价类划分是一种黑盒测试方法&#xff0c;把无限的测试变成有限的测试。把所有可能的输入数据,即程序的输入域划分成若干等价类,然后从每一个等价类中选取少数具有代表性的数据作为测试用例。依据需求将输入&#xff08;特殊情况下会考虑输出&#xff09;划分…

MySQL之InnoDB浅析

InnoDB是一个兼顾高可靠性和高性能的通用存储引擎。在 MySQL 5.7 中&#xff0c;InnoDB是默认的 MySQL 存储引擎。 InnoDB 的主要优势 支持事物&#xff0c;具备crash-safe的能力支持行锁以及MVCC&#xff0c;具备良好的多用户并发性和性能Buffer Pool&#xff0c;提升热点数…

Redis过期键及内存淘汰策略

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、Redis数据库的组织方式 Redis服务器将所有的数据库 都保存在src/server.h/redisServer结构中的db数组中。db数组的每个entry都是src/server.h/redisDb结构&#xff0c;每个redisDb结构代表一个数据库。Redis默认有16个…

测试用例设计方法之正交法

概念&#xff1a; 正交试验设计是研究多因素多水平的一种设计方法&#xff0c;它是根据正交性&#xff0c;由试验因素的全部水平组合中挑选出部分有代表性的点进行试验&#xff0c;通过对这部分试验结果的分析了解全面试验的情况&#xff0c;找出最优的水平组合。正交试验设计…

49 - 多态的概念和意义

---- 整理自狄泰软件唐佐林老师课程 1. 函数重写回顾 父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符&#xff08;::&#xff09;可以访问父类中的函数 p->print()不符合预期&#xff0c;期望调用子类中的print&#xff0c;实际调…

【知识网络分析】研究者合作网络(co-investigator)

研究者合作网络(co-investigator) 1 数据集读取2 网络数据集精简3 网络最大子群获取并可视化4 社团群体分类筛选5 求解网络图中节点中心度相关的指标值并进行可视化1 数据集读取 此处的合作作者(co-investigator)是指基金数据中的作者,数据集 来自于官网提供的加拿大国家…

redis数据库windows下c语言库的编译

使用cmake和make工具进行windows下的编译 下载 1.hiredis下载地址 https://github.com/redis/hiredis 克隆源码 2.cmake下载地址 https://cmake.org/ 3.make for windows http://www.equation.com/servlet/equation.cmd?fa=make 4.mingw 64位 https://download.csdn.net/d…

USB Network Native Driver for ESXi更新支持ESXi8.0

在ESXi8.0发布一个多月后&#xff0c;社区版的USB网卡驱动终于在flings上更新了&#xff0c;USB Network Native Driver for ESXi | VMware Flings Nov 23, 2022 - v1.11 Added support for ESXi 8.0 ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip md…

如何根据不同需求给Word文档设置保护?

Word文档可以设置不同的保护模式&#xff0c;我们可以根据不同需求选择合适的方法&#xff0c;下面介绍一下常用的3种方法。 方法一&#xff1a; 如果不想Word文档被随意打开&#xff0c;我们可以设置打开密码&#xff0c;只有输入正确的密码才能打开文件。 首先&#xff0c…

Metabase学习教程:视图-4

将数据可视化为直方图 学习何时使用直方图&#xff0c;以及元数据库如何使创建直方图更容易。 我们将逐步创建直方图&#xff0c;它是一种条形图&#xff0c;显示连续范围内的数据组。柱状图有助于深入了解人们可能购买的商品的数量、他们可能购买的价格范围&#xff0c;甚至…

JS 数据结构:集合

集合 集合是由一组无序且唯一&#xff08;即不能重复&#xff09;的项组成的。该数据结构使用了与有限集合相同的数学概念。ES6 JS 原生实现了集合 Set 数据结构&#xff08;具体看这篇文章JS Set 与 weakSet&#xff09;&#xff0c;但是没有取两集合交集、并集、差集的 API …

机器学习笔记之高斯网络(二)高斯贝叶斯网络

机器学习笔记之高斯网络——高斯贝叶斯网络引言回顾高斯网络贝叶斯网络&#xff1a;因子分解高斯贝叶斯网络&#xff1a;因子分解引言 上一节介绍了高斯网络及其条件独立性&#xff0c;本节将介绍高斯贝叶斯网络。 回顾 高斯网络 高斯网络最核心的特点是&#xff1a;随机变…

SpringBoot 多点互斥登录(web应用安全) 保姆级教程

1.什么是互斥登录 在实际生活中&#xff0c;很多网站都做了多点登录互斥的操作&#xff0c;简单来说就是同一个账号&#xff0c;只能在一台电脑上登录&#xff0c;如果有人在其他地方登录&#xff0c;那么原来登录的地方就会自动下线&#xff0c;再进行操作就会弹出登录界面。 …

【远程调用 MySQL数据库并操作】——使用NATAPP搭建内网穿透远程访问MySQL数据库并使用 Python新建、写入、读取、删除数据【详细版】

所有的程序都是免费的&#xff01;&#xff01; Python MySQL NATAPP 点个赞留个关注吧&#xff01;&#xff01; NATAPP 安装使用教程 官网 NATAPP 下载 官网 NATAPP配置教程 1、进入NATAPP 登录/注册 进行登录&#xff0c;没有的注册一下&#xff0c;需要实名认证哦&am…

python基础之字符串

文章目录一、字符串定义二、字符串相关使用三、空白字符表示哪些&#xff1f;四、实例1.要求&#xff1a;顺序并且居中对齐输出以下内容2.要求&#xff1a;1.将字符串中的空白字符全部删去&#xff1b;2.再使用“ ”作为分隔符&#xff0c;拼接成一个整齐的字符串五、字符串的切…

【vscode】远程云主机的报错

win11 之前在另一台电脑上的vscode是可以的 新电脑拷贝了vs的配置&#xff0c;但是远程不行了。 Install terminal quit with output: 过程试图写入的管道不存在。 发现连接不到远程以为是konw hosts 的问题&#xff0c; 删除了要访问ip的内容&#xff0c;还是不行&#x…

网络程序设计——异步选择模型(基于消息的选择、基于事件的选择)

目录 一、异步选择模型 1、基于消息的选择模型 &#xff08;1&#xff09;WSAAsyncSelect模型 &#xff08;2&#xff09; WSAAsyncSelect()函数 &#xff08;3&#xff09;使用 WSAAsyncSelect模型接收数据的过程 &#xff08;4&#xff09;WSAAsyncSelect模型的编程方法…

IDEA常用插件

笔记来源于B站视频 以下为视频的地址 【【尚硅谷】IDEA2022全新版教程&#xff0c;兼容JDK17&#xff08;快速上手Java开发利器&#xff09;】https://www.bilibili.com/video/BV1CK411d7aA?p26&vd_source581d732b20cb23e01428068f153a99ed 推荐1&#xff1a;Alibaba J…

MCE丨重组蛋白常见的融合标签

Q&#xff1a;什么是融合标签&#xff1f; A&#xff1a;融合标签是指利用 DNA 体外重组技术&#xff0c;在目的蛋白 N 端或 C 端进行融合表达的特定蛋白、多肽或寡肽标签。 Q&#xff1a;融合标签有什么作用&#xff1f; A&#xff1a;重组蛋白通过融合标签与包被在固相基质上…

第六章《类的高级特性》第5节:接口

在Java语言中,一个类只能继承一个父类,专业上把这种继承机制称为“单继承”。单继承是一种较为稳妥继承机制,能够规避很多潜在的问题,但这种继承机制的局限性也显而易见:子类不能从多个父类中继承属性和方法,从而无法最大程度的减少重复劳动。为了弥补这个缺陷,Java语言…