第06章 MyBatisPlus概述

15 篇文章 0 订阅
6 篇文章 0 订阅

序言

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. 数据库准备

  • 构建数据表
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)
);
  • 初始化数据
DELETE 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');

2. 添加依赖

 

<!-- MyBatisPlus依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <!-- 代码自动生成工具 mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.0</version> </dependency> <!-- mysql驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-- 数据连接池 druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.20</version> </dependency> <!-- lombok 实现实体类运行时添加构造器/setter/getter --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- lombok 实现实体类运行时添加构造器/setter/getter --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </dependency>

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<User> { }

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

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

6. 执行单元测试

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸码的xiao摩羯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值