码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis关于ORM的使用以及设计(一)[ORM的初始化]

时间:2019-01-21 17:52:08      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:数据库   节点   比较   form   通过   systems   col   分享图片   can   

  • 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的初始化]

标签:数据库   节点   比较   form   通过   systems   col   分享图片   can   

原文地址:https://www.cnblogs.com/marioS/p/10299899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!