Mybatis的是SpringMVC+Mybatis和数据库连接和操作的核心组件。

下面赏析一下Mybatis的核心源码包

减少我们写XML配置的mapper源代码

/** Copyright (c) 2011-2021, baomidou (jobob@qq.com).** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package com.baomidou.mybatisplus.core.mapper;import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;import org.apache.ibatis.annotations.Param;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;/*:`.:,:::,,.::      `::::::::`    `,:,` .:``:: `::::::::.:`      `:';,`::::,     .:::`   `@++++++++:``        :::`  @+++++++++++#:::, #++++++++++++++`,:      `::::::;'##++++++++++.@#@;`   ::::::::::::::::::::;#@####@, :::::::::::::::+#;::.@@######+@:::::::::::::.  #@:;,      @@########':::::::::::: .#''':`;##@@@+:##########@::::::::::: @#;.,:.#@@@######++++#####'::::::::: .##+,:#`@@@@@#####+++++'#####+::::::::` ,`::@#:``@@@@#####++++++'#####+#':::::::::::@.@@@@######+++++''#######+##';::::;':,`@@@@#####+++++'''#######++++++++++`#@@#####++++++''########++++++++'`#@######+++++''+########+++++++;`@@#####+++++''##########++++++,@@######+++++'##########+++++#`@@@@#####+++++############++++;;#@@@@@####++++##############+++,@@@@@@@@@@@###@###############++'@#@@@@@@@@@@@@###################+:`@#@@@@@@@@@@@@@@###################'`:@#@@@@@@@@@@@@@@@@@##################,,@@@@@@@@@@@@@@@@@@@@################;,#@@@@@@@@@@@@@@@@@@@##############+`.#@@@@@@@@@@@@@@@@@@#############@,@@@@@@@@@@@@@@@@@@@###########@,:#@@@@@@@@@@@@@@@@##########@,`##@@@@@@@@@@@@@@@########+,`+@@@@@@@@@@@@@@@#####@:``:@@@@@@@@@@@@@@##@;.`,'@@@@##@@@+;,```...``_ _     /_ _ _/_. ____  /    _
/ / //_//_//_|/ /_\  /_///_/_\      Talk is cheap. Show me the code._/             /*//*** Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能* <p>这个 Mapper 支持 id 泛型</p>** @author hubin* @since 2016-01-23*/
public interface BaseMapper<T> extends Mapper<T> {/*** 插入一条记录** @param entity 实体对象*/int insert(T entity);/*** 根据 ID 删除** @param id 主键ID*/int deleteById(Serializable id);/*** 根据实体(ID)删除** @param entity 实体对象* @since 3.4.4*/int deleteById(T entity);/*** 根据 columnMap 条件,删除记录** @param columnMap 表字段 map 对象*/int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);/*** 根据 entity 条件,删除记录** @param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)*/int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 删除(根据ID 批量删除)** @param idList 主键ID列表(不能为 null 以及 empty)*/int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);/*** 根据 ID 修改** @param entity 实体对象*/int updateById(@Param(Constants.ENTITY) T entity);/*** 根据 whereEntity 条件,更新记录** @param entity        实体对象 (set 条件值,可以为 null)* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)*/int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);/*** 根据 ID 查询** @param id 主键ID*/T selectById(Serializable id);/*** 查询(根据ID 批量查询)** @param idList 主键ID列表(不能为 null 以及 empty)*/List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);/*** 查询(根据 columnMap 条件)** @param columnMap 表字段 map 对象*/List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);/*** 根据 entity 条件,查询一条记录* <p>查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常</p>** @param queryWrapper 实体对象封装操作类(可以为 null)*/default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {List<T> ts = this.selectList(queryWrapper);if (CollectionUtils.isNotEmpty(ts)) {if (ts.size() != 1) {throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records");}return ts.get(0);}return null;}/*** 根据 Wrapper 条件,查询总记录数** @param queryWrapper 实体对象封装操作类(可以为 null)*/Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 entity 条件,查询全部记录** @param queryWrapper 实体对象封装操作类(可以为 null)*/List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 Wrapper 条件,查询全部记录** @param queryWrapper 实体对象封装操作类(可以为 null)*/List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 Wrapper 条件,查询全部记录* <p>注意: 只返回第一个字段的值</p>** @param queryWrapper 实体对象封装操作类(可以为 null)*/List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 entity 条件,查询全部记录(并翻页)** @param page         分页查询条件(可以为 RowBounds.DEFAULT)* @param queryWrapper 实体对象封装操作类(可以为 null)*/<P extends IPage<T>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 Wrapper 条件,查询全部记录(并翻页)** @param page         分页查询条件* @param queryWrapper 实体对象封装操作类*/<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}

从源代码中可以看出BaseMapper 定义出了基本的 增删查改接口。还有通用的统计分析接口。

Mybatis核心源码赏析(一)相关推荐

  1. Mybatis核心源码赏析(二)

    我们这次只看(一)里面的的这个类. BaseMapper<T> BaseMapper<T> 继承了 Mapper<T> Mapper<T>的源码为 为什 ...

  2. Mybatis核心源码赏析(五)

    mybatis中数据库连接池源代码 默认参数配置 protected int poolMaximumActiveConnections = 10;   protected int poolMaximu ...

  3. MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)

    MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...

  4. Mybatis 核心源码分析

    一.Mybatis 整体执行流程 二.Mybatis 具体流程源码分析 三.源码分析 写一个测试类,来具体分析Mybatis 的执行流程: public class MybatisTest {publ ...

  5. java linkedlist底层_手写Java LinkedList核心源码

    上一章我们手写了ArrayList的核心源码,ArrayList底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的 ...

  6. halcon区域腐蚀膨胀算子_超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...

    超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码). 发布时间:2019-03-20 12:32, 浏览次数:1259 , 标签: halcon 我在两年前的博客里 ...

  7. halfstone 原理_HashMap的结构以及核心源码分析

    摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...

  8. 面试官系统精讲Java源码及大厂真题 - 09 TreeMap 和 LinkedHashMap 核心源码解析

    09 TreeMap 和 LinkedHashMap 核心源码解析 更新时间:2019-09-05 10:15:03 人的影响短暂而微弱,书的影响则广泛而深远. --普希金 引导语 在熟悉 HashM ...

  9. Dubbo核心源码之SPI扩展

    本文来说下Dubbo核心源码之SPI扩展 文章目录 概述 Java中SPI机制详解 Dubbo SPI扩展 扩展功能介绍 扩展源码分析 ExtensionLoader初始化 配置文件扫描 扩展适配器 ...

最新文章

  1. Qt pro使用sql之类的需要添加的模块
  2. 全局异常处理_全局异常处理
  3. MySQL编程技巧_MySQL编程中的6个重要的实用技巧
  4. 微软认真聆听了开源 .NET 开发社区的炮轰: 通过CLI 支持 Hot Reload 功能
  5. azm335x 串口配置
  6. My new iMac 27
  7. php反射机制与依赖注入,利用反射机制实现基本的依赖注入
  8. 研究机构:全球半导体厂商今年资本支出1081亿美元
  9. beta冲刺7-咸鱼
  10. delphi透明组件(控件)开发
  11. svnserver 重新启动
  12. html仿excel冻结 css,如果做类似Excel 冻结首列的效果_html/css_WEB-ITnose
  13. kubectl template 一个例子
  14. Python中字符串的反转,及sord、 sorted、reverse、reversed的区别
  15. CoreData 的使用
  16. android 定时推送提醒,使用workManager实现每日定时推送通知
  17. 【Transformers】第 9 章:跨语言和多语言语言建模
  18. Hibernate(六)一对一映射关系
  19. C语言小熊代码,用C语言写个可爱小熊
  20. SD-WAN大势已来,网银互联被低估了吗?

热门文章

  1. 3款吃鸡不卡顿的国产手机,用了都说好,很值!
  2. 计算机专业课程体系介绍(含学习顺序)非常有利于新手学习
  3. 2012服务器修改远程桌面端口映射,WindowsServer2012修改远程桌面端口及常用命令
  4. pid控制电机转速,偏差为0时,电机如何保持恒定转速
  5. matlab里纵坐标公式,matlab公式总结
  6. python写入excel表格_Python读取写入Excel表格
  7. cesium实现地球自转效果
  8. onbeforepaste事件用法:
  9. python serial模块的使用
  10. 广东公需课2022 《数字化转型与产业创新发展》和《碳达峰、碳中和的实现路径与广东探索》