当前位置: 首页 > news >正文

MyBatis Plus (三) --------- 入门 HelloWorld

目录

  • 一、通用 CRUD
  • 二、插入操作
  • 三、更新操作
  • 四、查询操作
  • 五、删除操作
  • 六、MP 启动注入 SQL 原理分析
  • 七、通用 CRUD 小结


一、通用 CRUD

A、提出问题:

假设我们已存在一张 tbl_employee 表,且已有对应的实体类Employee,实现 tbl_employee 表的 CRUD 操作我们需要做什么呢?

B、实现方式

  • 基于 Mybatis

    • 需要编写 EmployeeMapper 接口,并手动编写 CRUD 方法
    • 提供 EmployeeMapper.xml 映射文件,并手动编写每个方法对应的 SQL 语句.
  • 基于 MP

    • 只需要创建 EmployeeMapper 接口, 并继承 BaseMapper 接口。这就是使用 MP 需要完成的所有操作,甚至不需要创建 SQL 映射文件。

二、插入操作

Integer insert(T entity);

@TableName
全局的 MP 配置: <property name="tablePrefix" value="tbl_"></property>

@TableField
全局的 MP 配置: <property name="dbColumnUnderline" value="true"></property>

@TableId
全局的 MP 配置: <property name="idType" value="0"></property>

支持主键自增的数据库插入数据获取主键值

MyBatis:需要通过 useGeneratedKeys 以及 keyProperty 来设置
MP:自动将主键值回写到实体类中

Integer insertAllColumn(T entity)

三、更新操作

Integer updateById(@Param("et") T entity);
Integer updateAllColumnById(@Param("et") T entity)

四、查询操作

T selectById(Serializable id);
T selectOne(@Param("ew") T entity);
List<T> selectBatchIds(List<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
List<T> selectPage(RowBounds rowBounds, @Param("ew") Wrapper<T> wrapper);

五、删除操作

Integer deleteById(Serializable id);
Integer deleteByMap(@Param("cm") Map<String, Object> columnMap);
Integer deleteBatchIds(List<? extends Serializable> idList);

六、MP 启动注入 SQL 原理分析

问题: xxxMapper 继承了 BaseMapper,BaseMapper 中提供了通用的 CRUD 方法,方法来源于 BaseMapper,有方法就必须有 SQL,因为 MyBatis 最终还是需要通过 SQL 语句操作数据.

前置知识:MyBatis 源码中比较重要的一些对象, MyBatis 框架的执行流程

Configuration
MappedStatement
……..

通过现象看到本质

A.employeeMapper 的本质 org.apache.ibatis.binding.MapperProxy

B.MapperProxy 中 sqlSession –>SqlSessionFactory

在这里插入图片描述
C.SqlSessionFacotry 中 → Configuration→ MappedStatements

每一个 mappedStatement 都表示 Mapper 接口中的一个方法与 Mapper 映射文件中的一个 SQL。MP 在启动就会挨个分析 xxxMapper 中的方法,并且将对应的 SQL 语句处理好,保存到 configuration 对象中的 mappedStatements 中。

D.本质

在这里插入图片描述
Configuration: MyBatis 或者 MP 全局配置对象

MappedStatement:一个 MappedStatement 对象对应 Mapper 配置文件中的一个select/update/insert/delete 节点,主要描述的是一条 SQL 语句

SqlMethod : 枚举对象 ,MP 支持的 SQL 方法

TableInfo:数据库表反射信息 ,可以获取到数据库表相关的信息

SqlSource: SQL 语句处理对象

MapperBuilderAssistant: 用于缓存、SQL 参数、查询方剂结果集处理等通过 MapperBuilderAssistant 将每一个 mappedStatement添加到 configuration 中的 mappedstatements 中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、通用 CRUD 小结

以上是基本的 CRUD 操作,如您所见,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作。BaseMapper 提供了多达 17 个方法给大家使用, 可以极其方便的实现单一、批量、分页等操作。极大的减少开发负担,难道这就是 MP 的强大之处了吗?

提出需求:

现有一个需求,我们需要分页查询 tbl_employee 表中,年龄在 18~50 之间性别为男且姓名为 xx 的所有用户,这时候我们该如何实现上述需求呢 ?

MyBatis : 需要在 SQL 映射文件中编写带条件查询的 SQL,并基于 PageHelper 插件完成分页。实现以上一个简单的需求,往往需要我们做很多重复单调的工作。普通的 Mapper 能够解决这类痛点吗?

MP:依旧不用编写 SQL 语句,MP 提供了功能强大的条件构造器 EntityWrapper

相关文章:

  • 云安全践行者:亚马逊云科技如何打好“安全”牌?
  • 第8章 Spring AOP
  • 操作系统 | 【一 概述】强化阶段 —— 应用题总结
  • 深度学习(PyTorch)——python中的两大法宝(dir与help)
  • 记一次vue^2.6.5-router^3.0.6的keep-alive事故
  • vi vim 快速跳到文件末尾 在最后一行下方新增一行 (光标换行,文字不换行)
  • 【我不熟悉的css】03. 使用px、em、rem
  • 1.直流无刷电机BLDC转速计算推论
  • 猿创征文|小而巧的API文档生成工具之smart-doc
  • PyTorch错误定位系列之DDP训练中 double free or corruption (out)
  • Go template详解(中)- 变量使用、if语句、迭代(数组、切片、map)、内置函数(比较、逻辑判断、打印、索引、函数调用)
  • JavaScript(三):理解异步
  • JVM阶段(3)-OutOfMemoryError异常
  • 企业运维容器之 docker 网络
  • 【QML】 如何导入QML文档目录
  • 2017 年终总结 —— 在路上
  • Java 最常见的 200+ 面试题:面试必备
  • Javascript Math对象和Date对象常用方法详解
  • Java多线程(4):使用线程池执行定时任务
  • java正则表式的使用
  • js ES6 求数组的交集,并集,还有差集
  • LeetCode18.四数之和 JavaScript
  • orm2 中文文档 3.1 模型属性
  • SegmentFault 2015 Top Rank
  • Vue.js-Day01
  • WePY 在小程序性能调优上做出的探究
  • 欢迎参加第二届中国游戏开发者大会
  • 基于axios的vue插件,让http请求更简单
  • 设计模式走一遍---观察者模式
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 无服务器化是企业 IT 架构的未来吗?
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​ArcGIS Pro 如何批量删除字段
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (14)Hive调优——合并小文件
  • (HAL库版)freeRTOS移植STMF103
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (篇九)MySQL常用内置函数
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (新)网络工程师考点串讲与真题详解
  • (转)关于多人操作数据的处理策略
  • **CI中自动类加载的用法总结
  • .Net Core 中间件验签
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net程序帮助文档制作
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @Transient注解