上一章 简单说明下Tomcat各个组件: Server:服务器,Tomcat服务器,一个Tomcat只有一个Server组件; Service:业务层,是Server下最大的子容器,一个Server可以包含多个Service组件: Connector:连接器,Service的子容器,一个Service可以有多个Connector连接器,作用体现在对外,接收客户端请求,HTTP.TCP等: Container:Service核心组件,通常有Engine.Host.Context.Wrapper,作…
前言 Mybatis-Plus是一个 MyBatis增强工具包,简化 CRUD 操作,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生,号称无侵入,现在开发中比较常用,包括我自己现在的项目中ORM框架除使用JPA就是他了. 我好奇的是他是如何实现单表的CRUD操作的? 不看源码之前,其实我大致能猜一猜:因为他号称零入侵,只做增强,那我们就能简单的理解为他只是在上面做了一层封装类似于装饰器模式,简化了许多繁重的操作. 但是万变不离其宗,他最后应该还是执行MyBatis里Map…
前几篇大致分析了初始化的过程,今天打算走一个SqlSession具体执行过程. @Test void shouldSelectAllAuthors() { try (SqlSession session = sqlMapper.openSession(TransactionIsolationLevel.SERIALIZABLE)) { List<Author> authors = session.selectList("org.apache.ibatis.domain.blog.ma…
1. 源码下载 地址:https://github.com/mybatis/mybatis-3.git. 国内访问有时确实有点慢,像我就直接先fork.然后从git上同步到国内的gitte上,然后在idea上一波clone下来,速度就比较理想了. 2. mybatis-parent 项目依赖mybatis-parent,下载mybatis-parent.地址:https://github.com/mybatis/paren. 下载完成后,导入项目,修改本地路径. 然后一路install.出现bu…
1.pluginElement(root.evalNode("plugins")) 解析plugins节点(注册interceptorChain里记录对应的拦截器) private void pluginElement(XNode parent) throws Exception { if (parent != null) { for (XNode child : parent.getChildren()) { //解析interceptor对应的class名 String inter…
1. XMLConfigBuilder 上一篇大致介绍了SqlSession的生成.在DefaultSqlSessionFactory的构造函数中就提到了Configuration这个对象.现在我们来看看Configuration的生成流程. public SqlSessionFactory build(Reader reader, String environment, Properties properties) { try { XMLConfigBuilder parser = new X…
1.Mybatis3的插件其实主要是用到了责任链和动态代理两种模式相结合而生成的.下面我们看一个例子,在执行所有update操作时,执行一个小小的测试输出. @Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) public class ExamplePlugin implements Interceptor {…
1.四种解析mapper方式 : package,resource,url,class. <mappers> <mapper resource="org/apache/ibatis/builder/BlogMapper.xml"/> <mapper url="file:./src/test/java/org/apache/ibatis/builder/NestedBlogMapper.xml"/> <mapper class…
1. 核心层次 2. SqlSession 先从顶层的SqlSession接口开始说起.SqlSession是MyBatis提供的面向用户的API,表示和数据库的会话对象,用于完成对数据库的一系列CRUD操作以及获取mappers和管理事务等. public interface SqlSession extends Closeable { /** * Retrieve a single row mapped from the statement key. * @param <T> the re…
each()实现 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ); }; jQuery.fn = jQuery.prototype = { selector: "", init: function(selector){ //仍然是mini的选择器. var result = document.querySelectorAll(selector); fo…