天天看點

從零開始,初識Mybatis-Plus一、建立資料庫二、建立一個SpringBoot項目三、MyBatis-Plus

写在开始:一个搬砖程序员的随缘记录
           
從零開始,初識Mybatis-Plus一、建立資料庫二、建立一個SpringBoot項目三、MyBatis-Plus

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

官网地址:MyBatis-Plus

之前写了MyBatis的使用,两者对比起来,MyBatis-Plus对比Mybatis用起来是比较方便,很多基本的操作都封装得很好,还有自定义自动生成基本代码的功能,下篇文章会讲到

文章目录

  • 一、创建数据库
  • 二、创建一个SpringBoot项目
    • 1、Mybatis-Plus的依赖
    • 2、在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:
    • 3、数据源配置
  • 三、MyBatis-Plus
    • 1、Mybatis-Plus注解
    • 2、条件构造器
      • 1、eq
      • 2、ne
      • 3、gt
      • 4、ge
      • 5、lt
      • 6、le
    • 3、CRUD 接口
      • 1、save
      • 2、remove
      • 3、update
      • 4、getById
      • 5、list
      • 6、page
      • 7、count
    • 四、实战代码

一、创建数据库

CREATE TABLE `tb_user_dat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '姓名',
  `sex` int(11) DEFAULT NULL COMMENT '性别 1:男 2:女',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_user` int(11) DEFAULT NULL COMMENT '创建人',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `update_user` int(11) DEFAULT NULL COMMENT '修改人',
  `is_delete` tinyint(1) DEFAULT '1' COMMENT '是否已删除 1:是 0:否',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
           

二、创建一个SpringBoot项目

可以看之前的文章:SpringBoot项目快速搭建

项目结构:

從零開始,初識Mybatis-Plus一、建立資料庫二、建立一個SpringBoot項目三、MyBatis-Plus

1、Mybatis-Plus的依赖

<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.1.tmp</version>
    </dependency>
           

整体依赖

<properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- Mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1.tmp</version>
        </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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
           

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

package com.cn.mybatisplus;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author demo
 */
@SpringBootApplication
@MapperScan("com.cn.mybatisplus.mapper")
public class MybatisPlusDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(MybatisPlusDemoApplication.class, args);
	}

}
           

3、数据源配置

application.yml

server:
  port: 8080 #端口号

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&characterEncoding=utf-8 #数据库url
    username: root #数据库用户名
    password: admin #数据库密码
    driver-class-name: com.mysql.jdbc.Driver
           

三、MyBatis-Plus

编写实体类TbUserDat.java

也可以使用Idea自带的database生成实体类

链接:IDEA一键生成表字段和基本代码

TbUserDat.java

package com.cn.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.io.Serializable;

/**
 * (TbUserDat)实体类
 *  * @author makejava
 * @since 2020-05-20 15:10:56
 */
@Data
public class TbUserDat implements Serializable {
    private static final long serialVersionUID = 299266960321958614L;

    /**
     * id
     *
     * */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * 姓名
     */
    private String name;

    /**
     * 性别 1:男 2:女
     */
    private Integer sex;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 创建时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_date", fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 创建人
     */
    private Integer createUser;
    /**
     * 修改时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "update_date", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /**
     * 修改人
     */
    private Integer updateUser;

    /**
     * 是否已删除 1:是 0:否
     */
    @TableLogic
    private Boolean isDelete;
}
           

1、Mybatis-Plus注解

上面用到几个常用的Mybatis-plus注解

  • @TableId

描述:主键注解

從零開始,初識Mybatis-Plus一、建立資料庫二、建立一個SpringBoot項目三、MyBatis-Plus
  • @TableField
@TableField(value = "create_date", fill = FieldFill.INSERT)
描述:只有进行新增操作才会进行更新这个字段,用于创建时间类字段

@TableField(value = "update_date", fill = FieldFill.INSERT_UPDATE)
描述:只有进行新增操作才会进行更新这个字段,用于修改时间类字段
主要在于fill的使用

           
  • @TableLogic

需要在application.yml中加入mybatis配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag  #全局逻辑删除字段值 3.3.0开始支持,详情看下面。
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
           

然后在实体类中物理删除字段上加上@TableLogic注解

想了解更多注解可以去官网看文档

2、条件构造器

1、eq

  • 相当于=
  • 例: eq(“name”, “小白”)—>name = ‘小白’

2、ne

  • 不等于 !=
  • 例: ne(“name”, “小白”)—>name != ‘小白’

3、gt

  • 大于 >
  • 例: gt(“age”, 18)—>age > 18

4、ge

  • 大于等于 >=
  • 例: ge(“age”, 18)—>age >= 18

5、lt

  • 小于 <
  • 例: lt(“age”, 18)—>age < 18

6、le

  • 小于等于 <=
  • 例: le(“age”, 18)—>age <= 18

3、CRUD 接口

增删改查都有多种不同的方式,这里只列举常用的

1、save

描述:保存

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
           

2、remove

描述:删除,有配置物理删除就是物理删除不会删除数据

// 根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
           

3、update

描述:修改

// 根据 whereEntity 条件,更新记录
boolean update(T entity, Wrapper<T> updateWrapper);
           

4、getById

描述:根据id查询详情

// 根据 ID 查询
T getById(Serializable id);
           

5、list

描述:查询列表

// 查询所有
List<T> list();
           

6、page

描述:分页查询

// 无条件翻页查询
IPage<T> page(IPage<T> page);
           

7、count

描述:查询总条数

// 查询总记录数
int count();
           

四、实战代码

分页插件:

启动类配置分页插件配置,加上注解

@EnableTransactionManagement

@Configuration

package com.cn.mybatisplus;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @author demo
 */
@SpringBootApplication
@EnableTransactionManagement
@Configuration
@MapperScan("com.cn.mybatisplus.mapper")
public class MybatisPlusDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(MybatisPlusDemoApplication.class, args);
	}

	@Bean
	public PaginationInterceptor paginationInterceptor() {
		PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
		// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
		// paginationInterceptor.setOverflow(false);
		// 设置最大单页限制数量,默认 500 条,-1 不受限制
		// paginationInterceptor.setLimit(500);
		// 开启 count 的 join 优化,只针对部分 left join
		paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
		return paginationInterceptor;
	}
}
           

service实现类方法

@Override
    public IPage<TbUserDat> getUserPageList(Integer pageNum, Integer pageSize) {
        //分页
        Page<TbUserDat> page = new Page<>(pageNum,pageSize);
        //加入筛选条件
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("is_delete", false);
        Page<TbUserDat> tbUserDatPage = page(page, queryWrapper);
        return tbUserDatPage;
    }
           

基本业务全部代码:

controller:

package com.cn.mybatisplus.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cn.mybatisplus.entity.TbUserDat;
import com.cn.mybatisplus.service.MybatisPlusService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author: demo
 * @Date: 2020-05-20 15:02
 */
@RestController
public class MybatisPlusController {
    @Autowired
    private MybatisPlusService mybatisPlusService;

    /**
     * 查询用户列表
     *
     * @return
     * */
    @GetMapping("/user")
    public List<TbUserDat> getUserList() {
        return mybatisPlusService.getUserList();
    }

    /**
     * 分页查询用户列表
     *
     * @param pageNum
     * @param pageSize
     * @return
     * */
    @GetMapping("/user/page")
    public IPage<TbUserDat> getUserPageList(@RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize) {
        return mybatisPlusService.getUserPageList(pageNum, pageSize);
    }

    /**
     * 根据id查询用户
     *
     * @param id
     * @return
     */
    @GetMapping("/user/{id}")
    public TbUserDat getUserById(@PathVariable("id") Integer id) {
        if (id == null) {
            return null;
        }
        return mybatisPlusService.getUserById(id);
    }

    /**
     * 新增用户
     *
     * @param tbUserDat
     * @return
     * */
    @PostMapping("/user")
    public Integer addUser(@RequestBody TbUserDat tbUserDat) {
        return mybatisPlusService.addUser(tbUserDat);
    }

    /**
     * 修改用户
     *
     * @param tbUserDat
     * @return
     * */
    @PatchMapping("/user")
    public Integer updateUser(@RequestBody TbUserDat tbUserDat) {
        return mybatisPlusService.updateUser(tbUserDat);
    }

    /**
     * 根据用户id删除用户
     *
     * @param id
     * @return
     * */
    @DeleteMapping("/user/{id}")
    public Integer deleteUser(@PathVariable("id") Integer id) {
        return mybatisPlusService.deleteUser(id);
    }
}
           

service:

package com.cn.mybatisplus.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cn.mybatisplus.entity.TbUserDat;

import java.util.List;

/**
 * @Author: demo
 * @Date: 2020-05-20 15:01
 */
public interface MybatisPlusService {

    /**
     * 查询用户列表
     *
     * @return
     * */
    List<TbUserDat> getUserList();

    /**
     * 分页查询用户列表
     *
     * @param pageNum
     * @param pageSize
     * @return
     * */
    IPage<TbUserDat> getUserPageList(Integer pageNum, Integer pageSize);

    /**
     * 根据id查询用户
     *
     * @param id
     * @return
     * */
    TbUserDat getUserById(Integer id);

    /**
     * 新增用户
     *
     * @param tbUserDat
     * @return
     * */
    Integer addUser(TbUserDat tbUserDat);

    /**
     * 修改用户
     *
     * @param tbUserDat
     * @return
     * */
    Integer updateUser(TbUserDat tbUserDat);

    /**
     * 根据用户id删除用户
     *
     * @param id
     * @return
     * */
    Integer deleteUser(Integer id);
}
           

serviceImpl:

package com.cn.mybatisplus.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cn.mybatisplus.entity.TbUserDat;
import com.cn.mybatisplus.mapper.MybatisPlusMapper;
import com.cn.mybatisplus.service.MybatisPlusService;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @Author: demo
 * @Date: 2020-05-20 15:02
 */
@Service
public class MybatisPlusServiceImpl extends ServiceImpl<MybatisPlusMapper, TbUserDat> implements MybatisPlusService {
    @Override
    public List<TbUserDat> getUserList() {
        List<TbUserDat> list = list();
        return list;
    }

    @Override
    public IPage<TbUserDat> getUserPageList(Integer pageNum, Integer pageSize) {
        //分页
        Page<TbUserDat> page = new Page<>(pageNum,pageSize);
        //加入筛选条件
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("is_delete", false);
        Page<TbUserDat> tbUserDatPage = page(page, queryWrapper);
        return tbUserDatPage;
    }

    @Override
    public TbUserDat getUserById(Integer id) {
        //直接调用封装的方法
        TbUserDat tbUserDat = getById(id);
        return tbUserDat;
    }

    @Override
    public Integer addUser(TbUserDat tbUserDat) {
        tbUserDat.setCreateTime(new Date());
        tbUserDat.setUpdateTime(new Date());
        save(tbUserDat);
        return tbUserDat.getId();
    }

    @Override
    public Integer updateUser(TbUserDat tbUserDat) {
        tbUserDat.setUpdateTime(new Date());
        //两种方式
        //第一种,根据id修改,需要校验id不能为空
        if (tbUserDat.getId() == null) {
            return -1;
        }
        updateById(tbUserDat);

        //第二种,根据条件进行修改,这里需要注意eq后面的值需要和数据库的字段一致,不是实体类的字段名,注意,注意,注意
        QueryWrapper<TbUserDat> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id", tbUserDat.getId());

        update(tbUserDat, queryWrapper);

        return tbUserDat.getId();
    }

    @Override
    public Integer deleteUser(Integer id) {
        //根据id删除id
        removeById(id);

        //根据条件删除id
        QueryWrapper<TbUserDat> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id", id);
        remove(queryWrapper);

        return id;
    }
}
           

下篇文章会介绍MybatisPlus代码生成器

Over

繼續閱讀