MyBatis-Plus学习使用(Springboot整合MyBatis-Plus)

二、MyBatis-Plus入门

================

1. 入门案例


入门案例主要讲一下使用mybatis-plus基本的增删改查

1.1 创建并初始化数据库

1.1.1 创建数据库

这里采用Navicat可视化工具创建数据库,当然,也可以在命令窗口创建,如下:

  • 数据库名:mybatis_plus

  • 字符集:常用为utf8

  • 排序规则:这里选utf8_general_ci

1.1.2 创建User表

这里为了方便演示,就直接创建一个简单的User表

建表语句如下:

DROP TABLE IF EXISTS USER;

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)

);

插入测试数据:

INSERT INTO user (id,name,age,email) VALUES

(1,‘onestar’,18,‘onestar@136.com’),

(2,‘twostar’,18,‘twostar@136.com’),

(3,‘threestar’,18,‘threestar@136.com’),

(4,‘fourstar’,18,‘fourstar@136.com’),

(5,‘fivestar’,18,‘fivestar@136.com’);

1.2 创建springboot工程

使用idea快捷创建springboot项目,这里就不细说,还有不懂的可以看我之前的文章SpringBoot 框架入门: ,idea快速创建SpringBoot项目那一部分。

注:这里使用的是springboot2.2.1的版本

1.2.1 导入依赖

这里需要将mybatis-plus、MySQL依赖导入,另外,为了简化实体类,不写get、set、tostring方法,添加lombok依赖,用lombok需要下载插件,可以再settings里面的Plugins搜索下载,下载后重启idea

  • 导入依赖

com.baomidou

mybatis-plus-boot-starter

3.0.5

mysql

mysql-connector-java

org.projectlombok

lombok

  • 下载lombok插件 

1.2.2 修改配置文件

springboot配置文件方式有多种,这里选用yml格式的,所以将配置文件后缀改成yml,并添加以下两个配置,如下:

  1. 数据库配置:driver、url、username、password

  2. mybatisplus日置配置:用来在终端显示数据库执行的详细信息

spring:

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

username: root

password: 806188

mybatis-plus:

configuration:

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

1.3 代码编写

在com.star包下创建两个包,并创建User实体类和UserMapper接口,目录结构如下:

  • entity包:用来放实体类

  • mapper包:用来放持久层接口

这里还需要让springboot扫描到mapper接口,在MybatisplusdemoApplication类中添加注解@MapperScan(“com.star.mapper”)

@SpringBootApplication

@MapperScan(“com.star.mapper”) //扫描到mapper接口

public class MybatisplusdemoApplication {…}

1.3.1 编写User实体类

package com.star.entity;

import lombok.Data;

/**

  • @Description: User实体类

  • @Date: Created in 11:54 2020/7/28

  • @Author: ONESTAR

  • @QQ群: 530311074

  • @URL: https://onestar.newstar.net.cn/

*/

@Data //可以简化实体类

public class User {

@TableId(type = IdType.AUTO)

private Long id;

private String name;

private Integer age;

private String email;

}

分析:

  • @Data注解:用于简化实体类,可以不用写get、set等方法
  • @TableId(type = IdType.AUTO)注解:这是主键策略注解
*   AUTO:表示自动增长策略
*   INPUT:表示需要自己设置ID,需要输入
*   NONE:表示没有策略,需要输入
*   UUID:随机生成唯一的值
*   ID\_WORKER:mybatisplus自带策略,生成19位的值,数字类型使用该策略
*   ID\_WORKER\_STR:mybatisplus自带策略,生成19位的值,字符串类型使用该策略

1.3.2 编写UserMapper接口

  • @Repository注解:可有可无,可以消去依赖注入的报错信息

package com.star.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.star.entity.User;

import org.springframework.stereotype.Repository;

/**

  • @Description: UserMapper接口

  • @Date: Created in 11:57 2020/7/28

  • @Author: ONESTAR

  • @QQ群: 530311074

  • @URL: https://onestar.newstar.net.cn/

*/

@Repository

public interface UserMapper extends BaseMapper {

}

1.3.3 编写测试类(简单增删改查)

编写好以上代码后,框架基本就搭建好了,可以在测试类中进行测试了,在test中添加测试,代码如下:

  • 注入mapper

@Autowired

private UserMapper userMapper;

  • 简单增删改查

//查询User

@Test

void findUser() {

//查询列表

List user = userMapper.selectList(null);

System.out.println(“user:” + user);

//根据ID查询

User user1 = userMapper.selectById(1L);

System.out.println(“user1:” + user1);

//通过多个ID批量查询

List users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));

users.forEach(System.out::println);

//简单的条件查询

HashMap<String, Object> map = new HashMap<>();

map.put(“name”, “onestar”);

map.put(“age”, 18);

List users2 = userMapper.selectByMap(map);

users2.forEach(System.out::println);

}

//添加User

@Test

void addUser(){

User user = new User();

user.setName(“sixstar”);

user.setAge(18);

user.setEmail(“sixstar@136.com”);

int insert = userMapper.insert(user);

System.out.println(insert);

}

//修改User

@Test

void updateUser(){

User user = new User();

user.setId(1L);

user.setAge(12);

int result = userMapper.updateById(user);

System.out.println(result);

}

//删除User

@Test

void deleteUser(){

//根据ID删除

int result = userMapper.deleteById(5L);

System.out.println(result);

//批量删除

int result2 = userMapper.deleteBatchIds(Arrays.asList(1,2,3));

System.out.println(result2);

//简单的条件删除

HashMap<String,Object> map = new HashMap<>();

map.put(“name”,“fourstar”);

map.put(“age”,18);

int result3 = userMapper.deleteByMap(map);

System.out.println(result3);

}

分析:

这里基本上都是直接调用mybatisplus封装好了的方法,有一些基本的方法:

  • 查询列表:selectList
  • 根据ID查询:selectById
  • 根据ID批量查询:selectBatchIds
  • 条件查询:selectByMap
  • 添加:insert
  • 根据ID修改:updateById
  • 根据ID删除:deleteById
  • 根据ID批量删除:deleteBatchIds
  • 条件删除:deleteByMap

2. 提升案例


进阶案例主要讲以下几个知识点:

  • 分页查询

  • 自动填充

  • mybatisplus实现乐观锁

  • 逻辑删除

  • 性能分析

  • 复杂条件查询

2.1 分页查询

Mybatis-Plus是自带了分页查询功能的,直接使用自集成的插件进行分页查询,在使用之前要配置插件,可以专门创建一个配置类来配置插件

2.1.1 配置插件

在com.star包下创建config包,创建MpConfig配置类,添加分页插件

package com.star.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

  • @Description: 配置类

  • @Date: Created in 10:26 2020/7/29

  • @Author: ONESTAR

  • @QQ群: 530311074

  • @URL: https://onestar.newstar.net.cn/

*/

@Configuration

public class MpConfig {

/**

  • 分页插件

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

return new PaginationInterceptor();

}

}

2.1.2 测试分页

//分页查询

@Test

void selectPage(){

//创建page对象(1:当前页;3:每页显示记录数)

Page page = new Page<>(1,3);

//调用分页查询方法,将分页所有数据封装到page对象里面

userMapper.selectPage(page,null);

//通过page对象获取分页数据

System.out.println(page.getCurrent()); //当前页

System.out.println(page.getRecords()); //每页数据list集合

System.out.println(page.getPages()); //总页数

System.out.println(page.getSize()); //每页显示记录数

System.out.println(page.getTotal()); //总记录数

System.out.println(page.hasNext()); //是否有下一页

System.out.println(page.hasPrevious()); //是否有上一页

}

分析:

  • 创建page对象:new Page<>(1,3); 参数表示当前页和每页显示记录数
  • 调用分页查询方法,将分页所有数据封装到page对象里面:selectPage(page,null);
  • 通过调用Mybatisplus插件提供的方法实现分页功能
*   page.getCurrent():当前页
*   page.getRecords():每页数据list集合
*   page.getPages():总页数
*   page.getSize():每页显示记录数
*   page.getTotal():总记录数
*   page.hasNext():是否有下一页
*   page.hasPrevious():是否有上一页

2.2 自动填充

在平时开发中,会有些数据需要自动填充,比如创建时间、更新时间等,这就可以使用MybatisPlus的自动填充功能,这里就以创建时间和更新时间为例进行演示

2.2.1 添加字段

User表中添加字段:

  • 创建时间:create_time

  • 更新时间:update_time

实体类添加属性和注解

@TableField(fill = FieldFill.INSERT)

private Date createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date updateTime;

2.2.2 实现元对象处理器接口

这里专门创建一个hander包来访处理器接口,在com.star包下创建hander包,创建MyMetaObjectHandler接口

package com.star.hander;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;

import org.springframework.stereotype.Component;

import java.util.Date;

/**

  • @Description: 元对象处理器

  • @Date: Created in 14:03 2020/7/29

  • @Author: ONESTAR

  • @QQ群: 530311074

  • @URL: https://onestar.newstar.net.cn/

*/

@Component //交给spring管理

public class MyMetaObjectHandler implements MetaObjectHandler {

//使用MybatisPlus实现添加操作,执行该方法

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName(“createTime”,new Date(),metaObject);

this.setFieldValByName(“updateTime”,new Date(),metaObject);

}

//使用MybatisPlus实现修改操作,执行该方法

@Override

public void updateFill(MetaObject metaObject) {

this.setFieldValByName(“updateTime”,new Date(),metaObject);

}

}

分析:

  • @Component:将该类交给spring管理
  • metaObject:元数据对象

Ending

Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

{

//使用MybatisPlus实现添加操作,执行该方法

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName(“createTime”,new Date(),metaObject);

this.setFieldValByName(“updateTime”,new Date(),metaObject);

}

//使用MybatisPlus实现修改操作,执行该方法

@Override

public void updateFill(MetaObject metaObject) {

this.setFieldValByName(“updateTime”,new Date(),metaObject);

}

}

分析:

  • @Component:将该类交给spring管理
  • metaObject:元数据对象

Ending

Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

[外链图片转存中…(img-PxaWJ6n6-1714419408276)]

[外链图片转存中…(img-Y4RsRIot-1714419408277)]

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值