它可以加载多个映射文件,每个文件对应数据表中的一张表; 构造会话工厂,通过 mybatis 的环境等配置信息构建会话工厂 SqlSessionFactory; 创建会话对象,由会话工厂创建 SqlSession...SQL 语句的 id,参数等信息; 输入参数映射,输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型,此过程类似于 JDBC 对 preparedStatement...对象设置参数的过程; 输出结果映射,输出结果类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型,此过程类似于 JDBC 对结果集的解析过程; 映射器 ${} 和 #{}...SQL 注入定义:Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击;主要有 广泛性、隐蔽性、危害大、操作方便 等特点; 模糊查询...指定一个名字,用于表示在迭代过程中,每次迭代到的位置 collection 必须指定,但在不同情况下的值不一样:1.
所以说到底,是我们写 SQL,Mybatis 帮我们执行 SQL ,跟数据库做交互,更简单来说,我们和 Mybatis 的配合就5步: 1、我们编写 SQL 2、发号施令(调用API) 3、Mybatis...,我相信有部分好奇的朋友还是想知道,那 Mybatis 是如何把我们编写的每一条 SQL 语句加载到语句集合大池子的呢?...[1aw1fxad72.png] 嗯,我们抱着好奇的小脑袋,对这两个疑问进行探索: 1、Mybatis 是如何把我们编写的每一条 SQL 语句加载到语句集合大池子的呢?...build(is); 我们跟踪了源代码,发现会话工厂构建器 SqlSessionFactoryBuilder 的build() 逻辑中,在实现会话工厂实例构建的同时,会解析配置文件并封装成全局配置对象...而 Mybatis 中这个语句集合的取值方式也是一样通过 key 值来去,这个 key 呢,我们这里是每一条语句的 唯一语句标识 ,当我们调用会话 SqlSession 的增删改查 API 的时候,就会传递这个唯一语句标识
4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。 解决:Mybatis自动将sql执行结果映射至java对象。...这就是延迟加载的基本原理。 当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。 11.如何获取生成的主键? 12.MyBatis支持动态SQL吗?...[ 13.MyBatis如何执行批量操作? 第一种方法:使用foreach标签 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。...item 表示集合中每一个元素进行迭代时的别名,随便起的变量名; index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用; open 表示该语句以什么开始,常用“...数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
1.item 表示集合中每一个元素进行迭代时的别名,随便起的变量名; 2.index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用; 3.open 表示该语句以什么开始,常用“(”; 4...7、输入参数映射:输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于 JDBC对preparedStatement对象设置参数的过程。...数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。...MyBatis的初始化,会从mybatis-config.xml配置文件,解析构造成Configuration这个类,就是图中的红框。...SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement
Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?...7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。...8)输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。...接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。...其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。 MyBatis是如何进行分页的?分页插件的原理是什么?
映射器 #{}和${}的区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成的主键 当实体类中的属性名和表中的字段名不一样 ,怎么办 Mapper...7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。...接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。...item 表示集合中每一个元素进行迭代时的别名,随便起的变量名; index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用; open 表示该语句以什么开始,常用“(”; separator...其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。 插件模块 Mybatis是如何进行分页的?分页插件的原理是什么?
mybatis-config.xml文件可以加载多个映射文件,每个文件对应数据库中的一张表 构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂 SqISessionFactory 创建会话对象...:由会话工厂创建SqISession对象,该对象中包含了执行 SQL语句的所有方法 Executor执行器:MyBatis底层定义了一个Executor接口来操作数据库, 它将根据SqISession传递的参数动态地生成需要执行的...语句的id、参数等信息输入 参数映射:输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。...输入参数映射过程类似于JDBC对 preparedStatement对象设置参数的过程输出结果映射:输出结果类型可以是Map、 List等集合类型,也可以是基本数据类型和POJO类型。...不支持生成自增主键的数据库:。 这里主要说下批量插入数据时如何返回主键ID
8,如何避免sql注入?...sql注入就是在客户端提交数据的时候输入一些猜测数据库表信息什么的获取数据库里的信息,一般来说只要开发人员注意对请求的参数中的值在后端处理时不要拼接在sql语句上,而是让后端将他视为一个字符串一般就不会发生...从安全性可见角度来讲,post稍微安全一些,因为参数不可见,但是传输上二者其实都不算安全的,因为抓包是能拿到数据报明文,只能通过https才能在传输上做到安全。 8,如何实现跨域?...2,工厂设计模式 工厂设计模式就是将创建对象的权力转交给工厂进行,比如一个咖啡工厂对外提供生产咖啡,卡布奇洛,需求者只需调用工厂提供的方法就能获得对象,而无需自己创建对象,当然这么做肯定有个好处,在项目后期维护的时候如果某个类发生变化只需要去改动创建者工厂而无需每个手动更改之前创建过的对象...3,装饰者设计模式 装饰者设计模式算是动态代理设计模式的低配版,从功能上来说,实际上单纯就是为了增强功能,装饰的方法在这个过程中发生了变化,区别于动态代理,装饰者模式更像是继承的一种替代方案。
(对象工厂) plugins(插件) environments(环境集合属性对象) environment(环境子属性对象) transactionManager(事务管理) dataSource(数据源...---- 12.parameterType和resultType parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。...在这个过程中,有一个相似的特点,就是这些Builder会读取文件或者配置,然后做大量的XpathParser解析、配置或语法的解析、反射生成对象、存入结果缓存等步骤,这么多的工作都不是一个构造函数所能包括的...即根据不同的输入参数来构建SqlSessionFactory这个工厂对象。...同时它也模糊了简单元素(叶子对象)和复杂元素(容器对象)的概念,使得客户能够像处理简单元素一样来处理复杂元素,从而使客户程序能够与复杂元素的内部结构解耦。
数据处理层:该层是 Mybatis 的核心层,负责数据处理,主要包括SQL 参数映射解析、SQL 语句的实际执行、执行结果集的映射处理等。...加载配置并初始化:Mybatis 框架会根据应用程序端提供的核心配置文件与 SQL 映射文件的内容,使用资源辅助类 Resources 把配置文件读取成输入流,然后通过对应的解析器解析并封装到 Configuration...,这里 SqlSessionFactoryBuilder 也是一样,它是 Mybatis 中的一个会话工厂构建器,在资源辅助类 Resources 读取到文件流信息之后,它负责解析文件流信息并构建会话工厂...数据库连接:你希望 MyBatis 帮你从已配置的数据源获取连接,还是使用自己提供的连接,可以动态创建数据源对象 Connection。...它是用来调用存储过程的,增加了存储过程的函数调用以及输出/输入参数的处理支持。
简介 计算机的基本工作就是存储和计算,而MyBatis是存储领域的利器。MyBatis的基本工作原理就是:先封装SQL,接着调用JDBC操作数据库,最后把数据库返回的表结果封装成Java类。...输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。 8.输出结果映射。...sql标签的id,value是对应的mapperstatement对象,我们之前说装进集合中备用就是在这里用的,这里用sql标签的id值从Map中取出对应的MapperStatement对象。...然后我们继续看createCacheKey,这个的意思就是根据这些参数生成一个缓存key,当我们调用同一个sql,并且传的参数是一样的时候,生成的缓存key是相同的。...第六部分:新增 更新 删除 操作 当我们理解了查询的步骤之后, 新增、删除、和更新一点难度没有,步骤和查询一模一样,就是一开始通过sql标签的id值从configuration维护的Map集合中取出对应的
数据处理层 第一:配置解析 在 Mybatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中的注解信息,解析后的配置信息会形成相应的对象并保存到...Mybatis 中 scripting 模块会根据用户传入的参数,解析映射文件中定义的动态 SQL 节点,形成数据库能执行的SQL 语句。...7、MappedStatement : 动态 SQL 的封装 8、SqlSource : 表示从 XML 文件或注释读取的映射语句的内容,它创建将从用户接收的输入参数传递给数据库的 SQL。...,MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。...MapperRegistry 相当于项目经理,项目经理只从大面上把握项目进度,不需要知道手下的小弟是如何工作的,把任务完成了就好。最终真正干活的还是 MapperProxyFactory。
数据处理层 配置解析 在 Mybatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中的注解信息,解析后的配置信息会形成相应的对象并保存到...Mybatis 中 scripting 模块会根据用户传入的参数,解析映射文件中定义的动态 SQL 节点,形成数据库能执行的SQL 语句。...MappedStatement : 动态 SQL 的封装 SqlSource : 表示从 XML 文件或注释读取的映射语句的内容,它创建将从用户接收的输入参数传递给数据库的 SQL。...,MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。...MapperRegistry 相当于项目经理,项目经理只从大面上把握项目进度,不需要知道手下的小弟是如何工作的,把任务完成了就好。最终真正干活的还是 MapperProxyFactory。
保存了主配置文件的所有信息,比如,数据库事务工厂、数据源对象、类型别名注册器、类型处理注册器等。...//解析拦截器和拦截器的属性,set到 Configration的interceptorChain中//MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。...3.2 解析过程 3.2.1environments节点解析 过程比较简单,根据environments的默认值创建environments的子节点,其中主要是创建数据库事务工厂和数据源对象,并构建Environment...整个解析过程中比较复杂,主要逻辑是要解析具体的mapper文件或者mapper接口。...说明:通过SqlSession获取Mapper接口,再调用Mapper接口的方法执行SQL。其实是先通过JKD生成代理类,底层也是用的根据id调用SqlSession方法的逻辑,和上面讲解的一样。
映射器 #{}和${}的区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成的主键 当实体类中的属性名和表中的字段名不一样 ,怎么办 Mapper...7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。...接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。...(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement...其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。 插件模块 Mybatis是如何进行分页的?分页插件的原理是什么?
结果正确,打印了2次,因为我们使用了两种不同的方式来执行SQL。 那么,我们就从这个简单的例子来看看 Mybatis 是如何运行的。 3....2、SqlSessionFactory 该类的作用了创建 SqlSession, 从名字上我们也能看出, 该类使用了工厂模式, 每次应用程序访问数据库, 我们就要通过 SqlSessionFactory..., 用完后直接归还而不会像 Session 一样销毁。...或者执行 SQL 从而更改数据库的数据, 因此它应该在 SqlSession 的事务方法之内, 在 Spring 管理的 Bean 中, Mapper 是单例的。...该方法循环了 mapper 元素,如果有 “package” 标签,则获取value值,并添加进映射器集合Map中,该Map如何保存呢,找到包所有class,并将Class对象作为key,MapperProxyFactory
BitmapFactory中的decodeFile、decodeByteArray工厂方法都是这么一个类似的过程,BitmapFactory通过不同的工厂方法与传递不同的参数调用不同的图像解析函数来构造...UML表示更明显: 除此之外其他集合也都是体现到了工厂方法模式,比如HashSet。...3、抽象工厂模式在安卓中的使用: 在源码中, 比较典型的抽象工厂模式的例子是java.sql包中的Connection类,在刚学习Java时我们都会学习使用JDBC链接数据库,代码大致是这样的: 上面我们是以...他其实就是一个集合: 泛型指定为DriverInfo,上面也知道,是把数据库驱动包在了DriverInfo里面: 驱动的具体实现类为 NonRegisteringDriver。...): 问题:上述数据存储方案,使用简单工厂、工厂方法模式该如何实现?
我们一步步看代码,首先从配置文件中取出刚刚解析的环境对象。 ? 然后根据环境对象获取事务工厂,如果配置文件中没有配置,则创建一个 ManagedTransactionFactory 对象直接返回。...该方法首先根据 key或者说 id 从 configuration 中取出 SQL 声明对象, 那么是如何取出的呢?...我们已经有了参数绑定对象,该对象中有SQL语句,参数。继续向下执行,从该对象获取参数映射集合,如果为空,则再次创建一个 BoundSql 对象。...4、如果返回的list不是null,则处理缓存和参数。否则调用queryFromDatabase 方法从数据库查询。 5、如果需要延迟加载,则开始加载,最后清空加载队列。...首先获取参数映射集合,然后从配置对象创建一个元数据对象,最后从元数据对象取出参数值。再从参数映射对象中取出类型处理器,最后将类型处理器和参数处理器关联。 我们看看最后一行代码: ? 还是JDBC。
XML配置文件的组织结构几乎完全一样 ?...SqlSessionFactoryBuilder会根据输入流inputStream等信息创建XMLConfigBuilder对象 SqlSessionFactoryBuilder调用XMLConfigBuilder...之后XMLConfigBuilder调用parse()方法:会从XPathParser中取出 节点对应的Node对象,然后解析此Node节点的子Node:properties...environmentsElement(root.evalNode("environments")); 方法是如何将environments的信息解析出来,设置到Configuration对象中的 /*...Configuration对象的过程中,XMLConfigParser解析 mybatis XML配置文件节点节点时,会有以下相应的代码 private void environmentsElement
领取专属 10元无门槛券
手把手带您无忧上云