您的位置:首页 > 运维架构 > 网站架构

Mybatis框架自学大纲(附带架构结构图+源码+视频)

2018-04-04 09:35 399 查看
MyBatis介绍MyBatis本是apache公司一个名叫iBatis的开源项目,在2010年Apache将其转移给了Google公司,从apache software foundation 迁移到了google code,并且改名为MyBatis,后来在2013年11月又被Google将其放到了Github上。MyBatis是一个优秀的持久层框架,它对jdbc操作数据库的过程进行了封装,开发者只需要关注SQL本身,而不需要浪费精力去处理,例如:注册驱动,创建connection,创建statement,手动设置参数,结果集检索等Jdbc繁杂的过程代码。MyBatis架构ConfigurationMyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护StatementHandler封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等ParameterHandler负责对用户传递的参数转换成JDBC Statement 所对应的数据类型ResultSetHandler负责将JDBC返回的ResultSet结果集对象转换成List类型的集合TypeHandler负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换MappedStatementMappedStatement维护一条<select|update|delete|insert>节点的封装SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回BoundSql表示动态生成的SQL语句以及相应的参数信息



MyBatis面试题汇总1 JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。解决: Mybatis自动将java对象映射至sql语句。④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。解决:Mybatis自动将sql执行结果映射至java对象。MyBatis编程步骤是什么样的?① 创建SqlSessionFactory② 通过SqlSessionFactory创建SqlSession③ 通过sqlsession执行数据库操作④ 调用session.commit()提交事务⑤ 调用session.close()关闭会话简单的说一下MyBatis的一级缓存和二级缓存?Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。Mybatis中设计模式Mybatis至少遇到了以下的设计模式的使用:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;单例模式,例如ErrorContext和LogFactory;代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;组合模式,例如SqlNode和各个子类ChooseSqlNode等;模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;装饰者模式,例如Cache包中的cache.decorators子包中等各个装饰者的实现;迭代器模式,例如迭代器模式PropertyTokenizer;接下来挨个模式进行解读,先介绍模式自身的知识,然后解读在Mybatis中怎样应用了该模式。温馨提示:想要了解更多的Mybatis技术,Java高级架构技术的,可以加入学习群:731661047,群里可以下载高清视频教程,以及技术资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java