公司系统集成了mybatisplus,其中给封装好了很多方法,很多人包括我平常只知道怎么去使用却很少关注其实现原理,今天闲着没事(偷偷摸鱼)的时候点开了mybatisplus的源码,找到了其中的一个方法。
在这里插入图片描述
可以看到我们这个selectById的方法拓展了AbstractMethod抽象类返回了一个MappedStatement类型的对象,今天我们就来了解一下这个MappedStatement是个什么玩意儿:

  1. MappedStatement是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等,它位于mybatis包的org.apache.ibatis.mapping目录下,是一个final类型也就是说实例化之后就不允许改变
  2. mapper.xml文件中一个select\insert\update\delete标签对应一个MappedStatement对象, select\insert\update\delete标签的id即是MappedStatement的id
  3. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
  4. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程.
    MappedStatement源码定义如下
private String resource;//mapper配置文件名,如:UserMapper.xml
  private Configuration configuration;//全局配置
  private String id;//节点的id属性加命名空间,如:com.lucky.mybatis.dao.UserMapper.selectByExample
  private Integer fetchSize;
  private Integer timeout;//超时时间
  private StatementType statementType;//操作SQL的对象的类型
  private ResultSetType resultSetType;//结果类型
  private SqlSource sqlSource;//sql语句
  private Cache cache;//缓存
  private ParameterMap parameterMap;
  private List<ResultMap> resultMaps;
  private boolean flushCacheRequired;
  private boolean useCache;//是否使用缓存,默认为true
  private boolean resultOrdered;//结果是否排序
  private SqlCommandType sqlCommandType;//sql语句的类型,如select、update、delete、insert
  private KeyGenerator keyGenerator;
  private String[] keyProperties;
  private String[] keyColumns;
  private boolean hasNestedResultMaps;
  private String databaseId;//数据库ID
  private Log statementLog;
  private LanguageDriver lang;
  private String[] resultSets;

其中StatementType指操作SQL对象的类型,是个枚举类型,值分别为:

STATEMENT(直接操作SQL,不进行预编译),

PREPARED(预处理参数,进行预编译,获取数据),

CALLABLE(执行存储过程)

ResultSetType指返回结果集的类型,也是个枚举类型,值分别为:

FORWARD_ONLY:结果集的游标只能向下滚动

SCROLL_INSENSITIVE:结果集的游标可以上下移动,当数据库变化时当前结果集不变

SCROLL_SENSITIVE:结果集客自由滚动,数据库变化时当前结果集同步改变;

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐