标签:数据库 节点 比较 form 通过 systems col 分享图片 can
WIKI中的解释。画重点
Object-relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to construct their own ORM tools.
ORM:对象关系映射
作用:在不同的系统之间做数据转换。
手段:通过面向对象的语言
实际举例:数据库是一套系统,应用是一套系统。两者之间数据的转换使用面向对象的语言。
再举个例子:数据库里面保存 行记录: id 1,苹果,红色 用图形语言(图形应该也是一种语言,不用嘴说,但每个人都能懂)表现为??.而用面向对象的语言来表达则是Apple{ red }
用上面的定义来验证MYBATIS。
①在我们实际使用MYBATIS的过程中,涉及不同系统之间的数据转换。 数据库-应用程序
②使用面向对象的语言Java将数据库的数据转换为内存中的对象。同时也能够将对象转变为内存中的数据。
通过以上两点得出结论。Mybatis是一款满足ORM的工具。
从对象->数据->对象?
说明:
SqlSessionFactoryBuilder:构建SqlSessionFactory
XMLConfigBuilder 读取mybatis-config.xml
XMLMapperBuilder 读取mybatis-config.xml中的<mappers>
XMLStatementBuilder 读取具体Mapper中的select、insert、update、delete
MappedStatementBuilder 生成具体的Statement
以上几个关键类,完成了ORM框架的初始化
问题:
1、创建时,创建对象数量?
SqlSessionFactoryBuilder(1)--XMLConfigBuilder(1)
XMLConfigBuilder(1)--XMLMapperBuilder(N) 根据<mapper节点中的xml文件个数创建
XMLMapperBuilder(1)--XMLStatementBuilder(N) 每一个select|insert|update|delete 会创建一个
XMLStatementBuilder(1)--MappedStatementBuilder(N) 每一个select|insert|update|delete 会创建一个
2、XMLMapperBuilder、XMLStatementBuilder、MappedStatement.Builder这三个对象创建的比较多,何时回收?
查看代码:
MappedStatement.Builder 引用mappedStatement
而mappedStatement被config引用.所以不会销毁
public static class Builder { private MappedStatement mappedStatement = new MappedStatement();
XMLStatementBuilder
引用着builderAssistant, 应该会被销毁?
/** * @author Clinton Begin */ public class XMLStatementBuilder extends BaseBuilder { private final MapperBuilderAssistant builderAssistant; private final XNode context; private final String requiredDatabaseId;
XMLMapperBuilder 应该会被销毁
public class XMLMapperBuilder extends BaseBuilder { private final XPathParser parser; private final MapperBuilderAssistant builderAssistant; private final Map<String, XNode> sqlFragments; private final String resource;
本地测试将jvm参数调整为 -xms 50m -xmx100M 查看堆对象。以上三个对象已经被回收
将内存设置大-xmx 256m -xmx 1024m 后,内存足够,没有被回收
下一节 分析 如何将对象转换为可执行的SQL
mybatis关于ORM的使用以及设计(一)[ORM的初始化]
标签:数据库 节点 比较 form 通过 systems col 分享图片 can
原文地址:https://www.cnblogs.com/marioS/p/10299899.html