• 第06章 MyBatisPlus概述


    序言

    1.内容介绍

    ​ 本章介绍了数据持久化的相关技术,对于什么是持久化、ORM原理、常用的ORM框架进行了一 一说明,对于MyBatisPlus的特点、MyBatisPlus架构以及MyBatisPlus的常用注解进行了详细的介绍,最后采用一个综合的案例对于MyBatisPlus的上机操作进行了实战演练。

    2.理论目标

    • 了解什么是持久化?
    • 掌握ORM原理
    • 掌握常用ORM框架
    • 了解MyBatisPlus特性

    3.技能目标

    • 熟练配置MyBatisPlus运行环境,为后期编码打好基础

    4.实践案例

    • 采用MyBatisPlus实现用户列表检索操作

    5.内容目录

    • 1.数据持久化概述
    • 2.MyBatisPlus概述
    • 3.MyBatisPlus初体验

    第1节 数据持久化概述

    1. 什么是持久化?

    • 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。
    • 持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等。

    2. ORM原理

    • 即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。

    3. 常用的ORM框架

    • Hibernate:全自动需要些hql语句
    • iBATIS:半自动自己写sql语句,可操作性强,小巧
    • MyBatis:是一个半自动的ORM持久层框架,内部封装了JDBC。
    • MyBatisPlus:是一个Mybatis的增强工具,它在Mybatis的基础上做了增强。

    第2节 MyBatisPlus概述

    1. 什么是MyBatisPlus?

    • Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
    • 已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就可以。

    2. MyBatisPlus特点

    • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring 。
    • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 。
    • 预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击 。
    • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
    • 内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询。
    • 分页插件支持多种数据库:支持MySQL,MariaDB,oracle,DB2,H2、HSQL,sQLite、Postgre,SQLServer等多种数据库
    • 内置性能分析插件:可输出Sq1语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
    • 内置全局拦截插件:提供全表delete、update操作智能分析阻断,也可自定义拦截规则,预防误操作

    3. 支持数据库

    • mysql、mariadb、oracle、db2 h2、hsql、sqlite、postgresql、sqlserver
    • 达梦数据库、虚谷数据库、人大金仓数据库

    4. MyBatisPlus架构

    5. MyBatisPlus注解

    • @TableName:表名注解
    属性类型必须指定值默认值描述
    valueString“”表名
    schemaString“”schema(@since 3.1.1)
    keepGlobalPrefixbooleanfalse是否保持使用全局的 tablePrefix 的值(如果设置了
    全局 tablePrefix 且自行设置了value 的值)(@since 3.1.1)
    resultMapString“”xml 中 resultMap 的 id
    autoResultMapbooleanfalse是否自动构建 resultMap 并使用(如果设置resultMap
    则不会进行 resultMap 的自动构建并注入)(@since 3.1.2)
    • @TableId:主键注解
    属性类型必须指定默认值描述
    valueString“”主键字段名
    typeEnumIdType.NONE主键类型
    • @TableField:字段注解(非主键)
    属性类型必须指定默认值描述
    valueString“”字段名
    elString“”映射为原生 #{ … } 逻辑当于写在 xml 里的 #{ … 部分
    existbooleantrue是否为数据库表字段
    conditionString“”字段 where 实体查询比较件,有值设置则按设置的
    值为没有则为默认全局的 %s=# {%s}
    updateString“”字段 update set 部分注例如:update="%s+1":
    表更新时会
    set version=version+1(该属优先级高于 el 属性)
    strategyEnumFieldStrategy.DEFAULT字段验证策略 3.1.2+使用3个替代
    insertStrategyEnumNDEFAULT举例:NOT_NULL: insert into table_a(column)
    values (columnProperty )
    updateStrategyEnumNDEFAULT举例:IGNORED: update table_a set column=# {columnProperty}
    whereStrategyEnumNDEFAULT举例:NOT_EMPTY: where colum {columnProperty}
    fillEnumFieldFill.DEFAULT字段自动填充策略
    selectbooleantrue是否进行 select 查询
    keepGlobalFormatbooleanfalse是否保持使用全局的 forma 进行处理(@since 3.1.1)
    • @Version:乐观锁注解、标记
    • @EnumValue:通枚举类注解(注解在枚举字段上)
    • @TableLogic:表字段逻辑处理注解(逻辑删除)
    属性类型必须指定默认值描述
    valueString“”逻辑未删除值
    delvalString“”逻辑删除值
    • SqlParser: 租户注解,目前只支持注解在mapper的方法上
    属性类型必须指定默认值描述
    filterbooleanfalsetrue: 表示过滤SQL解析,即不会进入ISqlParser解析链,
    否则会进解析链并追加例如tenant_id等条件
    • KeySequence:序列主键策略
      • 属性:value、resultMap
    属性类型必须指定默认值描述
    valueString“”序列名
    clazzClassLong.classid的类型, 可以指定String.class,
    这样返回的Sequence值是字符串"1"

    第3节 MyBatisPlus初体验

    1. 数据库准备

    • 构建数据表
    1. DROP TABLE IF EXISTS user;
    2. CREATE TABLE user
    3. (
    4. id BIGINT(20) NOT NULL COMMENT '主键ID',
    5. name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    6. age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    7. email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    8. PRIMARY KEY (id)
    9. );
    • 初始化数据
    1. DELETE FROM user;
    2. INSERT INTO user (id, name, age, email) VALUES
    3. (1, 'Jone', 18, 'test1@baomidou.com'),
    4. (2, 'Jack', 20, 'test2@baomidou.com'),
    5. (3, 'Tom', 28, 'test3@baomidou.com'),
    6. (4, 'Sandy', 21, 'test4@baomidou.com'),
    7. (5, 'Billie', 24, 'test5@baomidou.com');

    2. 添加依赖

     
    

    com.baomidou mybatis-plus-boot-starter 3.4.2 com.baomidou mybatis-plus-generator 3.3.0 mysql mysql-connector-java 5.1.47 com.alibaba druid-spring-boot-starter 1.1.20 org.projectlombok lombok true org.projectlombok lombok 1.18.16

    3. 添加全局配置

     
    

    spring: datasource: type: com.alibaba.druid.pool.DruidDataSource #Druid连接池类型 driver-class-name: com.mysql.jdbc.Driver #mysql驱动类 url: jdbc:mysql://localhost:3306/userdb #数据库url地址 username: root #数据库用户名 password: root #数据库密码 druid: validation-query: SELECT 1 FROM DUAL #验证的查询语句 initial-size: 10 #连接池启动时,创建的链接对象个数 min-idle: 10 max-active: 200 min-evictable-idle-time-millis: 300000 test-on-borrow: false test-while-idle: true time-between-eviction-runs-millis: 30000 pool-prepared-statements: true max-open-prepared-statements: 100 ....

    4. 添加@MapperScan 注解

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

    @SpringBootApplication @MapperScan("cn.com.chinahitech.mybatisplus_demo.mapper") public class MybatisplusDemoApplication { public static void main(String[] args) { SpringApplication.run(MybatisplusDemoApplication.class, args); } }

    5. 编码

    • 编写实体类User.java
     
    

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

    • 编写Mapper类 UserMapper.java
     
    

    public interface UserMapper extends BaseMapper { }

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

    @RunWith(SpringRunner.class) @SpringBootTest class MybatisplusDemoApplicationTests { @Autowired private UserMapper userMapper; @Test public void testSelect() { System.out.println(("----- selectAll method test ------")); List userList = userMapper.selectList(null); Assert.assertEquals(5, userList.size()); userList.forEach(System.out::println); } }

    6. 执行单元测试

    1. User(id=1, name=Jone, age=18, email=test1@baomidou.com)
    2. User(id=2, name=Jack, age=20, email=test2@baomidou.com)
    3. User(id=3, name=Tom, age=28, email=test3@baomidou.com)
    4. User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
    5. User(id=5, name=Billie, age=24, email=test5@baomidou.com)

  • 相关阅读:
    pip 使用国内镜像源
    react基础教程学习(一)
    Cmd中的一些命令
    Word控件Spire.Doc 【图像形状】教程(1) ;如何在 Word 中插入图像(C#/VB.NET)
    Matlab之机载雷达系统中的空时自适应处理(STAP)技术(附源码)
    Linux 安装 Docker +Docker Compose + cucker/get_command_4_run_container
    PHP:CentOS Linux环境下源码安装PHP
    IVIEW Table/Div 自适应高度
    Prometheus插件安装(cadvisor)
    wxFormBuilder + wxPython的wxListbook实现页面切换菜单
  • 原文地址:https://blog.csdn.net/a1234556667/article/details/126447100