mybatis关于ORM的使用以及设计[ORM的初始化]
Posted marios
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis关于ORM的使用以及设计[ORM的初始化]相关的知识,希望对你有一定的参考价值。
- ORM
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是否是一个合格的ORM框架?
用上面的定义来验证MYBATIS。
①在我们实际使用MYBATIS的过程中,涉及不同系统之间的数据转换。 数据库-应用程序
②使用面向对象的语言Java将数据库的数据转换为内存中的对象。同时也能够将对象转变为内存中的数据。
通过以上两点得出结论。Mybatis是一款满足ORM的工具。
- MYBATIS是如何做对象转换数据库数据的?
- 我们如何设计?
- MYBATIS是如何实现ORM
从对象->数据->对象?
- MYBATIS是如何将数据转换为对象的?
- 读取SQL信息
- 读取查询参数对象->SQL的信息
- 读取查询结果
说明:
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的初始化]的主要内容,如果未能解决你的问题,请参考以下文章
mybatis关于ORM的使用以及设计[参数对象转换为SQL语言]