mybatis
文章平均质量分 51
A股慈善家
金融鬼才
展开
-
mybatis源码学习------执行器Executor(二)
SimpleExecutorSimpleExecutor继承自BaseExecutor类,是最简单的Executor实现类,增删改查功能都依赖其持有的StatementHandler实例来完成。doUpdatepublic int doUpdate(MappedStatement ms, Object parameter) throws SQLException { Statement stmt = null; try { Configuration configuration = m原创 2020-11-14 19:07:13 · 367 阅读 · 2 评论 -
mybatis源码学习------执行器Executor(一)
Executor该接口中定义了操作数据库的各种方法,是mybatis的核心接口之一,是SqlSession接口的基础,其定义如下:public interface Executor { ResultHandler NO_RESULT_HANDLER = null; //执行增删改操作 int update(MappedStatement ms, Object parameter) throws SQLException; //执行查询操作 <E> List<E&g原创 2020-11-13 10:41:43 · 456 阅读 · 0 评论 -
mybatis源码学习------StatementHandler
StatementHandler接口StatementHandler接口提供了很多功能(从接口的定义中可以看出),是sql执行器接口的基础。接口定义public interface StatementHandler { //从连接对象中获取一个Statement Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException; //给Statement绑定实参原创 2020-11-12 21:23:09 · 461 阅读 · 0 评论 -
mybatis源码学习------主键生成器
正常情况下insert语句不会返回插入后所生成的主键,返回的是受影响的记录数。如果在插入一条数据后希望能得到数据库生成的主键(无论是oracle的自增序列,还是mysql的自增主键),则可以使用KeyGenerator接口。使用方式为在<insert/>或<update/>标签上配置useGeneratedKeys属性,关于useGeneratedKeys、keyProperty和keyColumn属性,官方文档对其的描述为:useGeneratedKeys(仅适用于原创 2020-11-12 18:20:19 · 1463 阅读 · 0 评论 -
mybatis源码学习------ResultSetHandler接口
ResultSetHandler的主要作用是将数据库的结果集按照用户在配置文件中配置的映射关系组装成对应的java对象,这是mybatis的核心功能之一。当执行完select查询语句之后,mybatis会将查询得到的结果集交给ResultSetHandler完成映射处理。ResultSetHandler接口ResultSetHandler接口的定义如下,其定义了三个方法,用于适配三种不同的场景:public interface ResultSetHandler { //映射结果集,得到E类型的对原创 2020-11-11 18:56:38 · 480 阅读 · 0 评论 -
mybatis源码学习------ResultSetHandler之嵌套查询&懒加载
延迟加载的概念延迟加载(lazy load)也称为懒加载,是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。mybatis对延迟加载的配置<resultMap>节点的fetchType属性,有效值为 lazy 和 eager。 指定属性后,将在映射中忽略全局配置参数 lazyLoadingEnabled,使用属性的值。全局配置文件中的lazyLoadingEnabled属性,延迟加载的全局开,当开启时,所有关联对象都会延迟加载。原创 2020-11-11 18:45:50 · 399 阅读 · 0 评论 -
mybatis源码学习------ResultSetHandler之嵌套映射
DefaultResultSetHandler的handleRowValues方法中有两个分支,一个用于处理嵌套映射,一个用于处理简单映射,本文讲分析其处理嵌套映射的分支。handleRowValues方法的定义如下:public void handleRowValues(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping p原创 2020-11-11 11:29:55 · 632 阅读 · 0 评论 -
mybatis源码学习------ResultSetHandler之简单映射
DefaultResultSetHandler的handleRowValues方法中有两个分支,一个用于处理嵌套映射,一个用于处理简单映射,本文讲分析其处理简单映射的分支。handleRowValues方法的定义如下:public void handleRowValues(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping p原创 2020-11-10 19:13:21 · 564 阅读 · 0 评论 -
mybatis源码学习------目录
Reflector类Invoker接口及其子类property工具包TypeParameterResolverMetaClass类MetaObject&ObjectWrapperUnpooledDataSourcePooledDataSourcecache缓存模块Transaction事务模块类型处理器模块binding模块configuration配置的解析mapper配置的解析resultMap和sql片段的解析sql语句配置的解析动态sql的解析(SqlNod.原创 2020-11-10 09:06:02 · 1410 阅读 · 6 评论 -
mybatis源码学习------sql语句的解析
解析insert、update、delete和select配置的代码入口如下所示:buildStatementFromContext方法逻辑同解析sql片段相似,都是先检查数据库厂商ID是否匹配private void buildStatementFromContext(List<XNode> list) { if (configuration.getDatabaseId() != null) { buildStatementFromContext(list, configu原创 2020-11-10 08:37:11 · 475 阅读 · 0 评论 -
mybatis源码学习------动态sql的解析(SqlSource)
SqlSourceSqlSource为SQL 来源接口。它代表从 Mapper XML 或方法注解上,读取的一条 SQL 内容。SqlSource接口SqlSource接口的定义如下:public interface SqlSource { //根据传入的实际参数,返回一个BoundSql对象 BoundSql getBoundSql(Object parameterObject);}SqlSource有多个实现类,类图如下:实现类的区别DynamicSqlSource 表示原创 2020-11-10 07:41:01 · 1621 阅读 · 0 评论 -
mybatis源码学习------动态sql的解析(SqlNode)
123原创 2020-11-04 23:20:07 · 1888 阅读 · 0 评论 -
mybatis源码学习------cache缓存模块
简介在优化系统性能时,优化数据库性能是非常重要的一个环节,而添加缓存则是优化数据库时最有效的手段之一。正确、合理地使用缓存可以将一部分数据库请求拦截在缓存这一层。MyBatis 中提供了一级缓存和二级缓存,而这两级缓存都是依赖于基础支持层中的缓存模块实现的。这里需要注意的是,MyBatis 中自带的这两级缓存与 MyBatis 以及整个应用是运行在同一个 JVM 中的,共享同一块堆内存。如果这两级缓存中的数据量较大, 则可能影响系统中其他功能的运行,所以当需要缓存大量数据时,优先考虑使用 Redis、M原创 2020-09-07 15:58:12 · 304 阅读 · 0 评论 -
mybatis源码学习------resultMap和sql片段的解析
resultMap的解析书接上回,mybatis对于<resultMap></resultMap>标签解析的方法入口为:resultMapElements(List list)根据mybatis-3-mapper.dtd文件中对于resultMap的定义可知,一个mapper节点内可以定义任意多个resultMap节点,所以resultMapElements方法会遍历所有的resultMap进行解析,代码如下:private void resultMapElements(L原创 2020-11-02 23:57:33 · 444 阅读 · 0 评论 -
mybatis源码学习------configuration的解析
通过上文的分析可以知道,解析mybatis-config.xml文件的工作是由XMLConfigBuilder类完成的,所以接下来学习mybatis是如何解析mybatis-config.xml文件中的配置项的。parse入口为parse()方法,parse()方法的源码为:public Configuration parse() { //防止重复解析 if (parsed) { throw new BuilderException("Each XMLConfigBuilder can原创 2020-11-02 23:56:38 · 461 阅读 · 0 评论 -
mybatis源码学习------mapper配置的解析
XMLMapperBuilder介绍XMLMapperBuilder类继承自BaseBuilder类,该类也使用了建造者设计模式。XMLMapperBuilder类的主要作用是解析xxxMapper.xml配置文件中用户的配置,如下图所示。mybatis-3-mapper.dtd文件中对于mapper节点的定义如下:XMLMapperBuilder类的核心功能就是解析<mapper></mapper>标签中配置的内容。字段XMLMapperBuilder类中定义的字段原创 2020-11-02 23:55:42 · 700 阅读 · 0 评论 -
mybatis-generator插件的使用
做个记录,方便用到时查询1、在pom文件中引入插件<!--引入mybatis-generator的插件--> <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId&g...原创 2018-08-09 11:45:48 · 1022 阅读 · 0 评论 -
(搬运)Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String'
原blog地址 http://blog.csdn.net/woshixuye/article/details/8820387一、发现问题 select num,name,phone from student AND num = #{num} Mybatis查询传入一个字符串传参数,报There is no getter for property named ‘num’转载 2017-12-29 10:47:47 · 248 阅读 · 0 评论