云计算百科
云计算领域专业知识百科平台

Mybatis Plus快速入门

简介

官网:https://baomidou.com/

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

愿景

我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

(简称 MP)是一个Mybatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,完全去SQL化,封装好了大量的CURD操作。 甚至把CRUD操作封装到了Service层,可以直接在controller调用现成的CRUD服务层,极度舒适省心。

局限:只支持简单的CRUD 操作。不支持多表操作(join ,union,子查询) 。

快速上手

1.建表

DROP TABLE IF EXISTS `user`;

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

select * from user;

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

  • 项目依赖
  • <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!–<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.5.9</version>
    <relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;
    </parent>–>
    <groupId>com.bigdata</groupId>
    <artifactId>demo1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo1</name>
    <description>demo1</description>
    <properties>
    <java.version>1.8</java.version>
    <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    <mybatis-plus.version>3.5.5</mybatis-plus.version>
    <velocity.version>2.0</velocity.version>
    <swagger.version>2.9.2</swagger.version>
    <swagger-bootstrap-ui.version>1.9.2</swagger-bootstrap-ui.version>
    <commons-lang3.version>3.9</commons-lang3.version>
    <commons-fileupload.version>1.3.1</commons-fileupload.version>
    <commons-io.version>2.6</commons-io.version>
    <fastjson.version>1.2.28</fastjson.version>
    <gson.version>2.8.6</gson.version>
    <json.version>20170516</json.version>
    <jodatime.version>2.10.1</jodatime.version>
    <jwt.version>0.7.0</jwt.version>
    <httpclient.version>4.5.1</httpclient.version>
    </properties>

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
    <relativePath/> <!– lookup parent from repository –>
    </parent>

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!–mybatis-plus–>
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
    </dependency>
    <!–mybatis-plus 代码生成器–>
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>${mybatis-plus.version}</version>
    </dependency>
    <!– Mybatis Plus 代码生成器模板引擎, –>
    <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>${velocity.version}</version>
    </dependency>

    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>

    <!– Spring Data Commons 做分页有用–>
    <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    </dependency>

    </dependencies>

    </project>

  • application.yml
  • server:
    port: 8081

    spring:
    profiles:
    active: dev
    application:
    name: mybatisplus-test
    datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
    username: root
    password: 123456

    # 打印SQL
    mybatis-plus:
    configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    或者如下所示:

    spring.application.name=demo1
    server.port=8081
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis?serverTimezone=GMT%2B8&characterEncoding=utf-8
    spring.datasource.username=root
    spring.datasource.password=root
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

    代码生成器

    虽然mybatis-plus已经节省了sql编写的大部分工作,但是当面对几十上百个表的模块处理时,仍然又大量的类模块要编写,其中最大的工作量就是实体类的编写,如果手工编写还很容易出错。

    所以mybatis-plus还推出了代码生成工具。

    在pom.xml中增加代码生成工具。

    增加一个代码生成的工具类

    CREATE TABLE `student` (
    `id` int(0) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',
    `age` int(0) NULL DEFAULT NULL COMMENT '年龄',
    PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
    SET FOREIGN_KEY_CHECKS = 1;

    select * from student;

    INSERT INTO `student` (id, name, age) VALUES
    (1, '张三', 18),
    (2, '李四', 20);

    EasyCode 自动代码生成:

    idea 连接数据库:

    第一次需要下载驱动:

    点击需要生成代码的表:

    如果需要生成符合自己预期的代码,需要自己设置模版。

    接着可以拿 teacher 表练练手:

    CREATE TABLE `teacher` (
    `id` int(0) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',
    `age` int(0) NULL DEFAULT NULL COMMENT '年龄',
    PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
    SET FOREIGN_KEY_CHECKS = 1;

    select * from teacher;

    INSERT INTO `teacher` (id, name, age) VALUES
    (1, '张三', 18),
    (2, '李四', 20);

    条件查询

    https://baomidou.com/guides/wrapper/

    普通 Wrapper (QueryWrapper):

    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name", "老王");

    Lambda Wrapper (LambdaQueryWrapper):

    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.eq(User::getName, "老王");

    生成的 SQL

    — 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同
    SELECT * FROM user WHERE name = '老王'

    测试:查询姓名是 张开头,年龄在10到20之间的学生信息

    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.bigdata.ApplicationDemo;
    import com.bigdata.mapper.UserMapper;
    import com.bigdata.pojo.User;

    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(classes = ApplicationDemo.class)
    public class ApplicationTests {

    @Autowired
    UserMapper userMapper;

    @Test
    public void test1(){
    List<User> users = userMapper.selectList(null);
    for (User user : users) {
    System.out.println(user);
    }
    }

    @Test
    public void test2(){

    /* QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name","老王");*/

    LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
    //queryWrapper.eq(User::getName,"老王");
    queryWrapper.lt(User::getAge,28);
    queryWrapper.gt(User::getAge,18);

    List<User> users = userMapper.selectList(queryWrapper);
    for (User user : users) {
    System.out.println(user);
    }
    }

    }

    分页查询

    https://baomidou.com/guides/data-interface/#page

     狂跨

    package com.demo.config;

    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;

    @Configuration
    public class MybatisPlusConfig {
    /**
    * 新增分页拦截器,并设置数据库类型为mysql
    */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    return interceptor;
    }
    }

    @Test
    public void testPage(){
    IPage<Student> page = new Page<>(1,10);
    IPage<Student> studentIPage = studentService.page(page);
    List<Student> records = studentIPage.getRecords();
    // 数据库中总的学生的数量
    long total = studentIPage.getTotal();
    System.out.println(total);
    // 总共的页数
    long pages = studentIPage.getPages();
    System.out.println(pages);
    // 每页展示多少条数据
    long size = studentIPage.getSize();
    System.out.println(size);

    // 循环打印当前页的数据
    for (Student student : records) {
    System.out.println(student);
    }
    }

    注意导入的 Page 的包为:

    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Mybatis Plus快速入门
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!