最新要闻
- 百事通!河南安阳一楼盘推出0首付0月供购房,这是什么操作?
- 交个朋友陷恶意裁员风波 没有了罗永浩还能走多远
- 世界快资讯丨口碑又崩了 漫威大片《蚁人3》豆瓣开分6.4:量子力学也带不动
- 【世界快播报】红旗接入百度AI文心一言 打造国产豪车品牌标杆
- 【当前独家】物理老师用《塞尔达传说:荒野之息》讲解小船过河原理:林克听了都说好!
- 世界头条:144MB缓存游戏神U!锐龙9 7950X3D跑分首曝:果然不出所料
- 每日热门:小米13 Ultra渲染图曝光:中分造型四摄
- 千万小心二手RTX 20显卡!新套路出现:黑片秒变白片
- 日本MRJ刚失败 印度也要自研国产飞机:可载100人
- 女子第一次打到无人驾驶网约车:十分激动
- 每日热门:支持30+种中外语言!搜狗输入法力挺麒麟OS
- 世界微头条丨网站设计师招聘_网站设计师
- 每片5.5元!绿联苹果钢化膜促销:适用iPhone 14/13/12系列
- 每日视讯:河南发布电动车佩戴头盔规定草案:未戴拒不改正罚20元
- 全球观天下!苦等3年微软终于点头:苹果M1/M2 Mac正式支持运行Win11
- 天天短讯!李荣浩新歌《乌梅子酱》火了!乌梅子酱淘宝搜索量暴涨200倍
手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
MyBatis-Plus (SpringBoot2 版) Learning Day01
Day 01 学习任务
了解Mybatis-Plus
整合Mybatis-Plus
通用CRUD Mybatis-Plus的配置
(资料图)条件构造器
1、了解 Mybatis-plus
1.1、Mybatis-Plus 介绍
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网:https://mybatis.plus/ 或 https://mp.baomidou.com/
MP愿景
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
1.2、代码以及文档
文档地址:https://mybatis.plus/guide/ 源码地址:https://github.com/baomidou/mybatis-plus
1.3、特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 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.4、架构
2、快速上手
对于Mybatis整合MP有常常有三种用法,分别是Mybatis+MP、Spring+Mybatis+MP、Spring Boot+Mybatis+MP。
2.1、创建数据库以及表
-- 创建测试表CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;use `mybatis_plus`;CREATE TABLE `user` (`id` bigint(20) NOT NULL COMMENT "主键ID",`name` varchar(30) DEFAULT NULL COMMENT "姓名",`age` int(11) DEFAULT NULL COMMENT "年龄",`email` varchar(50) DEFAULT NULL COMMENT "邮箱",PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 插入测试数据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.2、创建 SpringBoot 工程
使用 Spring Initializr 快速初始化一个 Spring Boot 工程
引入依赖
4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.5 com.riotian MyBatis-Plus-Learn 0.0.1-SNAPSHOT 8 8 UTF-8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web compile com.baomidou mybatis-plus-boot-starter 3.4.2 org.projectlombok lombok 1.18.20 com.alibaba fastjson 1.2.76 commons-lang commons-lang 2.6 mysql mysql-connector-java runtime com.alibaba druid-spring-boot-starter 1.1.23 org.springframework.boot spring-boot-maven-plugin 2.4.5
编写 application.yaml 文件
spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: kokoro
启动类设置
在Spring Boot启动类中添加@MapperScan注解,扫描mapper包
@SpringBootApplication@MapperScan("com.riotian.mplearn.mapper") // mapper 包存放的路径public class MyBatisPlusLearnApplication { public static void main(String[] args) { SpringApplication.run(MyBatisPlusLearnApplication.class, args); }}
添加实体
@Datapublic class User { private Long id; private String name; private Integer age; private String email;}
User类编译之后的结果:
添加 mapper
BaseMapper是MyBatis-Plus提供的模板mapper,其中包含了基本的CRUD方法,泛型为操作的实体类型
@Repository // 保障动态注入成功public interface UserMapper extends BaseMapper {}
测试
@SpringBootTestpublic class MP_Test { @Autowired private UserMapper userMapper; // @Repository 保障注入成功 @Test public void testSelectList(){ //selectList()根据MP内置的条件构造器查询一个list集合,null表示没有条件,即查询所有 userMapper.selectList(null).forEach(System.out::println); }}
IDEA若在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确的执行。 为了避免报错,可以在mapper接口上添加 @Repository 注解
添加日志
在application.yml中配置日志输出
mybatis-plus: configuration: # 配置MyBatis日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3、基本 CRUD
3.1、BaseMapper
MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接使用,接口如下:
Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能
package com.baomidou.mybatisplus.core.mapper;public interface BaseMapper { //插入一条记录 参数:实体 返回:int Integer insert(T entity); //根据 ID 删除 参数:主键ID 返回:int Integer deleteById(Serializable id); //根据 columnMap 条件,删除记录 参数:表字段 map 对象 返回:int Integer deleteByMap(@Param("cm") Map columnMap); //根据 entity 条件,删除记录 参数:实体对象封装操作类(可以为 null) 返回:int Integer delete(@Param("ew") Wrapper wrapper); //删除(根据ID 批量删除) 参数:主键ID列表 返回:int Integer deleteBatchIds(List idList); //根据 ID 修改 参数:实体对象 返回:int Integer updateById(T entity); //根据 whereEntity 条件,更新记录 参数:实体对象,实体对象封装操作类(可以为 null) 返回:int Integer update(@Param("et") T entity, @Param("ew") Wrapper wrapper); //根据 ID 查询 参数:主键ID 返回:T T selectById(Serializable id); //查询(根据ID 批量查询) 参数:主键ID列表 返回:List List selectBatchIds(List idList); //查询(根据 columnMap 条件) 参数:表字段 map 对象 返回:List List selectByMap(@Param("cm") Map columnMap); //根据 entity 条件,查询一条记录 参数:实体对象 返回:T T selectOne(@Param("ew") T entity); //根据 Wrapper 条件,查询总记录数 参数:实体对象 返回:int Integer selectCount(@Param("ew") Wrapper wrapper); //根据 entity 条件,查询全部记录 参数:实体对象封装操作类(可以为 null) 返回:List List selectList(@Param("ew") Wrapper wrapper); //根据 Wrapper 条件,查询全部记录 参数:实体对象封装操作类(可以为 null) 返回:List List