Mybatis plus

可以节省很多的工作,所有的CRUD

JPA yk-mapper Mybatis plus

偷懒的

简介:

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

愿景

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

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 BaseMapper
  • 强大的 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

快速入门

使用第三方组件

1.导入第三方依赖

2.研究依赖的配置

3.代码如何编写

4.提升扩展技术的能力

具体流程:

1.建表-建立对应的springboot工程,引入对应的包和依赖。

---真实开发中的
version乐观锁
deleted逻辑删除
gmt_create\get_modief

导入依赖:

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

主要安装的mysql8

配置时区配置:

url=jdbc:mysql://localhost:3306/mybatis?useSSL=false$useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2BB
  • 传统的:2.实现pojo-dao(连接mybatis,配置papper.xml文件)-service-controller
  • 使用了mybatis之后:
    • pojo
    • mapper接口
    • 使用
package com.ithema.reggie.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ithema.reggie.entity.Employee;
import org.apache.ibatis.annotations.Mapper; @Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
}

扫描mapper文件夹:

@MapperScan("com.ithema.reggie.mapper")

例子:

1.查询全部用户:

package com.ithema.reggie;

import com.ithema.reggie.entity.Employee;
import com.ithema.reggie.mapper.EmployeeMapper;
import com.ithema.reggie.service.EmployeeService;
import net.minidev.json.JSONUtil;
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
class ReggieApplicationTests {
@Autowired
private EmployeeMapper mapper;
@Test
void contextLoads() {
//参数是一个条件构造器
//查询全部用户
List<Employee> employees = mapper.selectList(null);
employees.forEach(System.out::print);
} }

配置日志

我们所有的sql是不可见的,我们希望它是可见的,开发时需要,上线关闭即可。

1.配置日志:

mybatis-plus:
configuration:
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

配置完毕日志之后,后面的学习就能自动的生成sql语句,你会喜欢上mybatis plus

CRUD扩展

insert

@Test
public void insert(){
User us = new User();
us.setName("郝泾钊");
us.setAge("8");
mapper.insert(user)
}

发现没有插入id会自动插入id

数据库的id为全局的唯一的默认值

主键的生成策略:

对应的数据库中的主键(uuid、自增id、雪花算法、redis、zookeper!)

更新方法

@Test
public void update(){
User us = new User();
//通过条件自动拼接动态sql
us.setId("6L")
us.setName("郝泾钊");
us.setAge("8");
//注意:updateById但是参数是对象
mapper.updateById(user)
}

所有的sql都是自动帮你配置的。

查询操作

@Test
public void selectById(){
User us = userMapper.selectById(1L); }

//测试批量查询

@Test
public void selectByBatchId(){
List<User> us = userMapper.selectBatchIds(Arrays.asList(1,2,3));
us.forEach(System.out::println); }

//测试条件区的查询用map操作

@Test
public void selectById(){
HashMap<String,Object> map = new Hash<>();
//自定义查询的条件
map.put("name","郝泾钊");
List<User> us = userMapper.selectByMap(map);
us.forEach(System.out::println);
}

分页查询

1.原始的limit分页

2.page

拦截器:

1.配置拦截器组件

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}

2.内置了一个page对象

//测试分页查询  第一页,5个数据
public void testPage(){
//参数一:当前页
//参数二:页面的大小
//使用了分页之后,分页变得简单
Page<User> page = new Page <>(1,5);
userMapper.selectPage(page,null);
page.getRecords().forEach(System.out::println);
}

删除操作

//测试分页查询  第一页,5个数据
public void testDelete(){
User us = userMapper.deleteById(1L);
}
//测试分页查询  第一页,5个数据
public void testDelete(){
List<User> us = userMapper.deleteBatchIds(Arrays.asList(1,2,3));
}
@Test
public void selectById(){
HashMap<String,Object> map = new Hash<>();
//自定义查询的条件
map.put("name","郝泾钊");
List<User> us = userMapper.deleteByMap(map);
us.forEach(System.out::println);
}

逻辑删除

逻辑删除:在数据库中没有移除 :通过 deleted =0 =>delete=1

物理删除:在数据库中移除了

管理员可以参看被删除的记录,防止数据的丢失,类似于回收站

1.在数据库中增加一个deleted字段

2.实体类添加一个deleted属性

@Tablelogid//逻辑删除注解

3.配置bean组机

mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
@Bean
public ISqlInjector sqlInjector(){
return new logicSqlInjector();
}

走的是逻辑删除,但是是更新操作

查询的时候会自动过滤逻辑删除的项目--管理员看的很清楚

Mybatis Plus (特性、快速入门、日志、CRUD)的更多相关文章

  1. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  2. MyBatis 框架之快速入门程序

    一.使用 IDEA 快速创建 Maven 项目 关于如何快速创建 Maven 项目,这个可以参考下面这篇文章: Maven 项目管理工具基础入门系列(一) 二.快速配置 MyBatis 依赖 jar ...

  3. Hibernate快速入门之CRUD

    一.Hibernate的基本概念 前言 Hibernate是一个ORM框架,ORM是Object Relational Mapping的缩写,即对象关系映射,也就是将面向对象思想的编程语言与关系型数据 ...

  4. 持久层之 MyBatis: 第一篇:快速入门

    MyBatis入门到精通 JDBC回顾 1.1.认识MyBatis 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 1.3.准备数据 1.4 使用JDBC手写MyBatis框架 ...

  5. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  6. MyBatis 学习总结 01 快速入门

    本文测试源码下载地址: http://onl5wa4sd.bkt.clouddn.com/MyBatis0918.rar 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级 ...

  7. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  8. SpringData JPA快速入门和基本的CRUD操作以及Specifications条件查询

    SpringData JPA概述: SpringData JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作 ...

  9. Mybatis介绍、使用IDEA快速入门

    1. Mybatis概念 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 JavaEE三层架构:表现层.业务层.持久层 JDBC 与 MyBatis 对比: MyBatis 本是 A ...

  10. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

随机推荐

  1. Gorm源码学习-数据库连接

    1 前言 gorm源码地址: Gorm , 本文基于commit:cef3de694d9615c574e82dfa0b50fc7ea2816f3e 官方入门指南: Dosc 2 连接数据库代码示例 目 ...

  2. Python-OpenCV的安装及学习资料

    Conda环境安装 OpenCV pip install opencv-python opencv-contrib-python -i https://mirrors.aliyun.com/pypi/ ...

  3. ArcObjects SDK开发 001 ArcObjects SDK 简介

    1.什么是ArcObjects SDK 在网上搜索什么是ArcObjects,会搜到如下的定义. 这个定义比较准确,也比较容易理解. 2.什么是ArcEngine 在网上搜索ArcEngine,一般会 ...

  4. 【实时数仓】Day01-数据采集层:数仓分层、实时需求、架构分析、日志数据采集(采集到指定topic和落盘)、业务数据采集(MySQL-kafka)、Nginx反向代理、Maxwell、Canel

    一.数仓分层介绍 1.实时计算与实时数仓 实时计算实时性高,但无中间结果,导致复用性差 实时数仓基于数据仓库,对数据处理规划.分层,目的是提高数据的复用性 2.电商数仓的分层 ODS:原始日志数据和业 ...

  5. 【java】【File】用File相关类写一个小工具,完成从指定目录下抽取指定文件并复制到新路径下完成重命名的功能

    今日份代码: import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.io.*; i ...

  6. MySQL的安装与配置,图形化软件安装,以及IDEA上的配置操作

    1. MySQL安装详细教程 注意:本次安装例为随笔发布时最新的8.0.31版本教程,由于您所希望安装的版本不同可能会导致一些问题,请谅解. 进入官网下载界面 https://www.mysql.co ...

  7. Mysql-delete语句

    ` 点击查看代码 删除2天之前的所有数据 delete From lkt_files_record where DATE(add_time) <= DATE(DATE_SUB(NOW(),INT ...

  8. 浅谈入行Qt桌面端开发程序员-从毕业到上岗(1):当我们说到桌面端开发时,我们在谈论什么?

    谈谈我自己 大家好,我是轩先生,是一个刚入行的Qt桌面端开发程序员.我的本科是双非一本的数学专业,22年毕业,只是部分课程与计算机之间有所交叉,其实在我毕业的时候并没有想过会成为一名程序员,也没有想过 ...

  9. uni-app生命周期和路由跳转

    生命周期分为:应用生命周期和页面生命周期 具体内容可参考:uni-app官网Api 应用生命周期(仅可在App.vue中监听) (1)onLaunch:当uni-app 初始化完成时触发(全局之触发一 ...

  10. JavaScript:箭头函数:作为参数进行传参

    之前已经说过,JS的函数,也是对象,而函数名是一个变量,是可以进行传参的,也即函数是可以被传参的. 只要是函数,都可以被传参,但是箭头函数的语法更为灵活,所以更方便进行传参. 如上图所示,fun1是一 ...