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

    

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

时间: 2024-08-02 22:29:10

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

ORM表之间高级设计

ORM表之间高级设计 一.表的继承 # db_test1 # 一.基表 # Model类的内部配置Meta类要设置abstract=True, # 这样的Model类就是用来作为基表 # 多表:Book,Publish,Author,AuthorDetail class BaseModel(models.Model): # 实现表公共字段的继承 create_data = models.DateTimeField(auto_now_add=True) is_delete = models.Boo

C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)

反射以及Attribute在ORM中的应用 一. 反射什么是反射?简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等.反射有什么用呢?反射不但让你在运行是获取对象的信息,还提供运行时动态调用对象方法以及动态设置.获取属性等的能力.反射在ORM中有什么用呢?我这里所讨论的ORM实现是通过自定义Attribute的方式进行映射规则的描述的.但是我们并不知道具体哪个对象需要对应哪个表,并且这些对象是独立于我们的ORM框架的,所以我们只能通过自定义Attr

第54篇ORM对象关系映射 如何使用ORM与数据可建立连接

1. ORM(对象关系映射) 很多语言的很多web框架中都有这个概念 2. 为什么要有ORM? 1. 写程序离不开数据. 2. 在Python程序中要用到数据库中的数据,怎么办? 1. 使用pymysql连接MySQL数据库的步骤 1. import pymysql 2. 建立连接 conn = pymysql.connect( host='127.0.0.1', port=3306, database='day43', user='root', password='123', charset=

mybatis关于ORM的使用以及设计(二)[DaoInterface 转换 Mapper代理对象]

第一节中,分析了Mybatis的ORM框架的初始化,这篇来分析SQL执行过程中,对象->SQL是如何转换的 其中包含两种映射思想 ①DAO接口->Mapper实例 ②执行DAO的方法时,参数->SQL的转换 DAO接口如何转变成具体可执行SQL的Mapper 我们在使用mybatis的时候,Mapper会设置命名空间. <mapper namespace="org.mybatis.example.mapper.MybatistestMapper"> Jav

5 功能4:个人站点页面设计(ORM跨表与分组查询)

1.个人站点页面文章的查询 # 个人站点 http://www.cnblogs.com/wh1520577322/ http://www.cnblogs.com/liucong12345/ http://www.cnblogs.com/kin1492/ (1)用户未找到,404页面构建 url # 个人站点页面设计 re_path(r'^(?P<username>\w+)$', views.home_site, name='home_site'), view 404.html <!DOC

BBS--功能4:个人站点页面设计(ORM跨表与分组查询)

查询: 日期归档查询 1 date_format ============date,time,datetime=========== create table t_mul_new(d date,t time,dt datetime); insert into t_mul_new values(now(),now(),now()); select * from t_mul; mysql> select * from t_mul; +------------+----------+---------

ORM之一:适合我的ORM

一.常见开源ORM框架 比喻:Kerosene ORM,DbLinq,Dapper,DynamicQuery,elinq,glinq,NPoco,Relinq,EF,ServiceStack.OrmLite,IQToolkit,对于这些框架,在单表查询这块支持的还蛮可以,但是对于多表查询的那种语法,我真有点接受不了,总感觉怪怪的,直观感觉就是没有了linq语法的那种美感,请忽视我的挑剔与自不量力,纯属个人喜好. 例如: var cmd = link .From( x => x.Employees

ORM是什么?如何理解ORM

一.ORM简介         对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中.那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法.         这种方案存在以下不足:         1.持久化层缺乏弹性.一旦出现业务需求的变更,就必须修改持久化

ORM是什么?如何理解ORM?

一.ORM简介         对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中.那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法.         这种方案存在以下不足:         1.持久化层缺乏弹性.一旦出现业务需求的变更,就必须修改持久化