mybatis核心类-MappedStatement
MappedStatement是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等,它位于mybatis包的org.apache.ibatis.mapping目录下,是一个final类型也就是说实例化之后就不允许改变mapper.xml文件中一个select\insert\update\delete标签对应一个MappedStatement对象, select\ins
·
公司系统集成了mybatisplus,其中给封装好了很多方法,很多人包括我平常只知道怎么去使用却很少关注其实现原理,今天闲着没事(偷偷摸鱼)的时候点开了mybatisplus的源码,找到了其中的一个方法。
可以看到我们这个selectById的方法拓展了AbstractMethod抽象类返回了一个MappedStatement类型的对象,今天我们就来了解一下这个MappedStatement是个什么玩意儿:
- MappedStatement是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等,它位于mybatis包的org.apache.ibatis.mapping目录下,是一个final类型也就是说实例化之后就不允许改变
- mapper.xml文件中一个select\insert\update\delete标签对应一个MappedStatement对象, select\insert\update\delete标签的id即是MappedStatement的id
- Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
- 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:结果集客自由滚动,数据库变化时当前结果集同步改变;
更多推荐
所有评论(0)