文档章节

项目中 IBatis.net 的使用一

victorruan
 victorruan
发布于 2014/07/16 09:51
字数 894
阅读 10
收藏 0

IBatis.net作用是把数据库查询与对象的属性间建立映射关系。但它并不是一个实体关系映射工具,仅用于帮助程序人员建立实体和SQL语句或者存储过程间的映射。因此只能叫半自动OR/M工具。我们的开票系统也用到了这个工具。

IBatis.net的配置:

一、引用几个DLL,注意在数据层引用即可。

单独使用映射的情况下,只需要引用IBatisNet.DataMapper.dll就可以了

其中IBatisNet.Common.dll是必须的,Entities是项目自己的,不用管它

二、完成对组件的添加后,还需要添加三个XML文档

1 providers.config ----DataMapper根据这个确定是什么类型数据库(放在数据层)

2 SqlMap.xml ----数据映射文档,里面包含了SQL语句(放在数据层)

3 SqlMap.config ----DataMapper的配置文档,它详细描述了工程中SqlMap.XML和providers.config文档的位置,以及其他配置项(必须放在Web跟目录下)。

先看SqlMap.config(这个文件的作用主要是指定db连接串,告诉系统providers.config在哪? 以及db与entity的映射文件在哪?):

<?xml version="1.0" encoding="utf-8"?>

<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <settings>
    <setting useStatementNamespaces="true"/> //如果是true,那么写数据查询时,查询语句的名称前要添加它的完整命名空间
    <setting cacheModelsEnabled="true"/> //全局化配置DataMapper客户能否启用cache,默认是true
    <setting validateSqlMap="false"/>
  </settings>

  <providers embedded="ICSON.InvoicePrinter.SqlProviderImpl.Config.providers.config,ICSON.InvoicePrinter.SqlProviderImpl"/>
          //指定providers.config的位置
<database> <provider name="sqlServer2.0" /> //如果使用默认的数据提供者,这句可以不要,如果系统中使用多个数据库,需要配置provider的内容 <dataSource name="SqlServer" connectionString="${ConnectionString}" /> //数据库链接字符串,我们的项目在IninMapper时,会给这个变量赋值 </database> <sqlMaps> //程序的数据映射文件的位置,如果有多个XML,就写多行,如果比较多,也可以当一个单独的XML中去写,比如<sqlMap resource=”Maps/All.XML”/>,然后在ALL.xml再添加数据映射文件,这样就 实现了加载一组数据映射文件
<sqlMap resource="Maps/KeyValueEntity.xml"/> <sqlMap resource="Maps/InvoiceCompany.xml"/> <sqlMap resource="Maps/InvoiceTemplate.xml"/> <sqlMap resource="Maps/InvoiceDistribute.xml"/> <sqlMap resource="Maps/BlankInvoiceInventory.xml"/> <sqlMap resource="Maps/InvoiceMachine.xml" /> <sqlMap resource="Maps/Order.xml"/> <sqlMap resource="Maps/SoPrint.xml"/> <sqlMap resource="Maps/SoPrintItem.xml"/> <sqlMap resource="Maps/Invoice.xml"/> <sqlMap resource="Maps/Log.xml"/> <sqlMap resource="Maps/InvoiceUser.xml"/> <sqlMap resource="Maps/OrderOutStockMaster.xml"/> <sqlMap resource="Maps/Batch.xml"/> <sqlMap resource="Maps/OrderBatch.xml"/> </sqlMaps> </sqlMapConfig>

三、创建SqlMapper实例,这个是单例模式,文件名ProviderBase.cs,放在数据层中。

using System;
using IBatisNet.Common.Utilities;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
using ICSON.Utility;
using System.Configuration;
using System.Collections.Specialized;

namespace ICSON.InvoicePrinter.SqlProviderImpl
{
    /// <summary>
    /// 数据访问配置类。
    /// </summary>
    public class ProviderBase
    {
        private static volatile ISqlMapper _mapper;

        private ProviderBase() { }
  
        public static ISqlMapper Instance()
        {
            if (_mapper == null)
            {
                lock (typeof(SqlMapper))
                {
                    if (_mapper == null) // double-check    
                    {
                        InitMapper();
                    }
                }
            }
            return _mapper;
        }    

        /// <summary>    
        /// Init the 'default' SqlMapper defined by the SqlMap.Config file.    
        /// </summary>    
        public static void InitMapper()
        {
            try
            {
                var handler = new ConfigureHandler(Configure);
                var builder = new DomSqlMapBuilder();
                var connection = ConfigurationManager.ConnectionStrings[Config.DefaultConnectionName];

                if (connection == null)
                    throw new ConfigurationErrorsException("缺少数据库连接配置(" + Config.DefaultConnectionName + "");

                var properties = new NameValueCollection
                                     {
                                         {"ConnectionString",connection.ConnectionString}
                                     };

                builder.Properties = properties;
                _mapper = builder.ConfigureAndWatch(Config.BasePath + "sqlmap.config", handler);

            }
            catch (Exception e)
            {
                Log.Error("sqlmap.config配置错误:"+e.ToString());
                throw;
            }
        }


        public static void Configure(object obj)
        {
            _mapper = null;
        }
 
        public static ISqlMapper Get()
        {
            return Instance();
        }   

    }
}

外界调用方法:

IList list = SqlMapper.Instance().QueryForObject<list>("UserInfo.GetCount", param);

因为是单例的,第一次调用时,DomSqlMapBuilder对象会通过查询SqlMap.config来创建一个sqlMapper实例,以后调用就直接从缓存读取了。

DomSqlMapBuilder.ConfigureAndWatch()方法负责监视配置文件的更新情况,如果配置或者映射文件有更新,SqlMapper对象会重新载入并不重启系统。

 

我们的项目建立了一个SqlMap访问层基类,文件名是 BaseSqlMapDao.cs

那么这个基类完成什么工作呢,见下一篇博客吧。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文转载自:http://www.cnblogs.com/victorruan/p/3580470.html

victorruan
粉丝 0
博文 13
码字总数 0
作品 0
徐汇
私信 提问
IBatis.net ORM初体验

IBatis.net介绍 IBatis.net 是2001年发起的开源项目,它是一个轻量级的ORM框架,现在IBatisNET已经是属于Apache下的一个子项目了,最新版本是1.6.2. 官方网站:http://www.mybatis.org/ .net项目...

Yamazaki
2014/04/20
75
0
iBATIS In Action:序言和目录

序言 在我的软件开发生涯中,我曾工作于多种不同的环境中。在同一家公司中,人们往往会以不同的方式进行开发。考虑到各种各样的挑战——人、工具,它们就是开发人员所处的世界——我们会很快...

长征3号
2017/12/12
0
0
net开源项目

1 以色列 特思开源软件 http://cn.tersus.com/#Id=3924 2 开源社区 http://www.ctochina.net/ .NET开源项目链接 http://www.cnblogs.com/dustinyang/articles/361479.html...

冰点沐雪
2012/07/22
0
0
IBatis.net使用说明

IBatis.net是移植于java版本,所以在.net平台上的操作和java平台上的操作基本没有什么太大的差别。严格来说,ibatis.net并不算的上是一种orm,因为它的sql语句均写到了配置文件中,没有自己专...

JungleKing
2016/11/23
27
0
ibatis.net查询float类型返回实体类或者ResultMap时无效的问题

ibatis.net下出现的问题 数据库里有一个float类型的Amount字段,实体类中Amount的对应类型为Decimal,一直不能正确返回带有value的实体类。排除发现是该Amount字段导致(去掉Amount字段查询则...

刘昌鑫
2016/12/07
36
0

没有更多内容

加载失败,请刷新页面

加载更多

R语言基本命令,dataframe增删改查

基本操作: 查询变量类型(假设变量名是a) class(a) 在R语言中: T 代表--> True F 代表--> False 与、或运算符 读取: 读取csv文件到dataframe(字符串不当作factor类型来处理,csv的na不作...

flash胜龙
26分钟前
4
0
重看《功夫熊猫1》却有了另一番感触

最近带着小孩,又看了一遍电影《功夫熊猫1》。但这次中间的很多情节,让我有了另一番新的感触。 电影的开头是熊猫阿宝,在梦里成为了一个武功盖世的大侠。这是他最大的梦想。 当阿宝热情洋溢...

我是菜鸟我骄傲
29分钟前
10
1
3.设计模式之二:原型模式【创建型模式】

在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样...

Eappo_Geng
39分钟前
7
0
Springboot+Junit测试出现No tests found matching

话不多说,出现以下错误,如果各注解都没问题,请检查包路径 测试用例包路径必须跟项目启动类包路径一致,不然也会报下面错误 java.lang.Exception: No tests found matching [{ExactMatche...

fangsw
45分钟前
5
0
封装,继承,多态?

1. 封装? 封装指的是利用抽象数据类型将数据和基于数据操作全部放在一个类里,使其构成一个不可分割的实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的实现细节,并对外只提供操作...

happywe
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部