zoukankan      html  css  js  c++  java
  • LmgORM项目: 介绍

     

    LmgOrm介绍 

     

    第一章:前言... 3

    第二章:系统层次划分... 3

    第三章:LmgOrm数据库访问层... 3

    第四章:LmgOrm ORM.. 4

    一:LmgOrm O/R Mapping 起步... 4

    二:LmgOrm O/R Mapping映射方法说明... 4

    三:LmgOrm O/R Mapping对继承的支持... 4

    四:LmgOrm O/R Mapping操作核心... 5

    五:LmgOrm O/R Mapping 事务处理... 5

    六:LmgOrm O/R Mapping 对象查询... 5

    七:LmgOrm O/R Mapping 配置文件... 5

    第一章:前言 

    LmgOrm的目标,是开发一个开源的基于Microsoft.Net的轻量级的应用软件系统开发框架,包含以下内容:

    Ø 一个轻量级的O/R Mapping框架。

    这个框架从二年前就开始做了,但是因为工作的原因,具体的开发过程一直是断断续续,中间因个人对编程思想认识的变化,在结构方面也一直有点变化。

    第二章:系统层次划分 

    clip_image002

    数据存取方式

    clip_image004

    第三章:LmgOrm数据库访问层 

    image

    第四章:LmgOrm ORM

    image

    一:LmgOrm O/R Mapping 起步

    对开发人员来说,只有BaseDao、NHibernatePage、QueryHelper等极少数接口需要掌握,上手快,使用非常方便。

    下面的例子给出了使用LmgOrm进行ORM操作的基本过程。

    定义一个类:

    View Code
    public class Product{

    private int m_ID;

    private string m_Name;

    private decimal m_Price;

    public Product() { }

    public Product(string name, decimal price){

    m_Name
    = name;

    m_Price
    = price;

    }

    public int ID{

    get { return m_ID; }

    set { m_ID = value; }

    }

    public string Name{

    get { return m_Name; }

    set { m_Name = value; }

    }

    public decimal Price{

    get { return m_Price; }

    set { m_Price = value; }

    }

    }

    上面这个Produc类对应的数据库表的结构应该是:

    clip_image008

    下面的代码演示了LmgOrm是如何把Product对象新增到数据库中的。

    二:LmgOrm O/R Mapping映射方法说明 

    映射部分,完成对象和关系型数据库之间映射关系的表达。LmgOrm使用xml来描述映射关系。

    以下是实体类对应的XML文件 需要设置成 嵌入的资源 要不然系统会报错的。

    View Code
    <?xml version="1.0" encoding="GBK"?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="LmgOrm.Entity" assembly="LmgOrm.Entity"> <class name="Produc" table="cm_Produc" lazy="false"> <id name="Id" type="Int32" length="10"> <column name="id" not-null="true" unique="true"/> <generator class="sequence"> <param name="sequence">SEQ_Produc_ID</param> </generator> </id> <property name="Name" column="name" not-null="False" length="50" type="String"/> <property name="Price " column="price" not-null="False" length="10" type=" Int32 "/> </class> </hibernate-mapping>

    三:LmgOrm O/R Mapping对继承的支持 

    LmgOrm目前支持一种继承模式:ONE_CLASS_ONE_TABLE

    这种映射模式将每个类映射到对应的一个表

    四:LmgOrm O/R Mapping操作核心 

    LmgOrm O/R Mapping框架的操作核心,在于BaseDao类,对实体对象的操作,包括增、删、改、查的操作,都是通过这个接口来进行的。

    查询的补助类是:QueryHelper

    SQL查询补助类是:DbHelper

    五:LmgOrm O/R Mapping 事务处理

    LmgOrm框架提供了简单的事务处理的能力,这是通过BaseDao接口来实现的。他们会自动开启事务。

    六:LmgOrm O/R Mapping 对象查询

    1:一般查询

    2:分页查询

    QueryHelper queryHelper = new QueryHelper()

    queryHelper.AddTable(
    typeof(KnowUser), "m");

    queryHelper.AddOrder(
    "m", "ReTopic", false);

    queryHelper.SetFullFieldSql(
    null, null);

    NHibernatePage nPage
    = QueryHandler.Instance.QueryByPage("数据库连接", typeof(KnowUser), curPage, pageSize, queryHelper);

    七:LmgOrm O/R Mapping 配置文件

    配置文件例子:

    View Code
    <?xml version="1.0" encoding="gb2312" ?>

    <LmgOrm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <LmgOrm.ORM>

    <connections>

    <connection name="DBNAME_COUNTRYDB" datetype="sqlserver2000" conntype="System.Data.SqlClient.SqlConnection" assembly="System.Data.SqlClient">

    <![CDATA[Data Source=lmg\SQLEXPRESS;DataBase=countrydb;user=sa;password=123456;Connect Timeout=180;Enlist=true;Pooling=true;Max Pool Size = 300;Min Pool Size = 5;Connection Lifetime=200;]]>

    </connection>

    </connections>

    <assembly>

    <![CDATA[LmgOrm.Entity]]>

    </assembly>

    </LmgOrm.ORM>

    <LmgOrm.Cache />

    </LmgOrm>

    第五章:LmgOrm Cache

    一:LmgOrm Cache起步

    这个没什么说的用的dz!nt3.0的缓存,我是直接Copy过来的 随便也学习学习一个它的原理咯。

    二:LmgOrm Cache缓存架构说明

    缓存架构说明如下:

    clip_image010

    看到了吧,里面的DNTCache就是“策略”模式的应用场景,而DefaultCache , ForumCache,RssCache等等就是相应的具体策略,每一种策略都会对.net所提供的缓存机制进行一番“订制”,以实现不同的用途。比如系统DefaultCache在对象到期时提供数据再次加载机制,而ForumCache而不使用这种机制,另外还有缓存的到期时间几种策略也各不相同,这都是根据具体的应用场景"量身订制"的。

    下面对缓存设计所采用的几种技术做一下简要说明。包括XML,XPATH ,"单件模式" 以及跨web园共享数据。

    记得在豪杰工作期间,一次老梁给我们开会,其中的一段话我至今还记忆犹新,他说CPU访问内存的速度和访问硬盘的速度在某些情况下是相近的,如果我没理解的话比如说“虚拟缓存”或最新频繁访问的硬盘区段,这些地方的代码或文件会有比较高的运行和访问效率。因此,我想到了使用文件标志关联的方法来解决这个多进程问题。接着就顺理成章的使用了文件修改日期这个属性进行在多进程下缓存是否更新的依据了,大家可以到开源下载包中的config文件夹下把一个cache.config的文件,对应最新的数据项再回过头来看代码就会一清二楚了

    作者:罗敏贵
    邮箱:minguiluo@163.com
    QQ群:34178394 建群 主要是寻找志同道合的人士一起学习和讨论自己的所学所思
    出处:http://luomingui.cnblogs.com/
    说明:专注于微软平台项目架构、熟悉设计模式、架构设计、敏捷个人和项目管理。现主要从事WinForm、ASP.NET、等方面的项目开发、架构、管理工作。文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。
    知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

  • 相关阅读:
    ICommand接口
    Binding自动侦听
    WPF比较两个随机数大小写,利用MVVM思想实现
    从一个ListBox中的元素点击导入另一个ListBox元素中
    利用FluidMoveBehavior制作出手机通讯录平滑的效果
    从零开始学习Gradle之三---多项目构建
    用Gradle 构建你的android程序
    iPhone/iPad调整事件递交
    iOS8-Sampler
    iOS8-Sampler
  • 原文地址:https://www.cnblogs.com/luomingui/p/1995103.html
Copyright © 2011-2022 走看看