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是如何做对象转换数据库数据的?
  1. 我们如何设计?

       技术分享图片

 

  1. MYBATIS是如何实现ORM

   从对象->数据->对象?

  • MYBATIS是如何将数据转换为对象的?
  1. 读取SQL信息
  2. 读取查询参数对象->SQL的信息
  3. 读取查询结果

        技术分享图片

 

 

    说明:

    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语言]

Django框架的初使用-1

[simple-orm-mybaits]基于Mybatis的ORM封装介绍

ORM和Mybatis

基于 XML 的 MyBatis 应用

mybatis是orm框架吗