【IBatis.Net】 各类配置说明

1、各个配置文件的做用说明

  providers.config:指定数据库提供者,.Net版本等信息。html

  xxxxx.xml:映射规则。sql

  SqlMap.config:大部分配置通常都在这里,如数据库链接等等。数据库

2、默认配置文件的存放位置

  在Windows应用项目或者类库项目中,须要放在项目的/bin/debug/目录下。apache

  在Web应用程序中,须要放在应用程序根目录。缓存

  固然,这也不是强制性的,也能够很灵活地配置服务器

复制代码
        public IList<PersonModel> GetList()
        {
            //ISqlMapper mapper = Mapper.Instance();
            DomSqlMapBuilder builder = new DomSqlMapBuilder();
            ISqlMapper mapper = builder.Configure(@"C:\Users\Administrator\Desktop\Ibatis.Net测试\Ibatis.Net测试\SqlMap.config");
            IList<PersonModel> ListPerson = mapper.QueryForList<PersonModel>("SelectAllPerson", null);  //这个"SelectAllPerson"就是xml映射文件的Id
            return ListPerson;
        }
复制代码

  例如以上代码,就从指定的位置去加载了SqlMap.config。注意,虽然SqlMap.config是从指定的位置,可是要注意里面的resource引入的资源,仍是从原来的默认目录开始找,例如app

<providers resource="providers.config"/>

  SqlMap.config里面的providers.config这个东西,仍是须要在原来默认位置。ide

3、SqlMap.config

  下面先放上一个在官网直接下载后的sample.SqlMap.config函数

复制代码
<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig 
  xmlns="http://ibatis.apache.org/dataMapper" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <properties resource="../../../Files/properties.config"/>
  
  <settings>
    <setting useStatementNamespaces="false"/>
  </settings>
  
  <providers resource="../../../Files/providers.config"/>
  
    <!-- Database connection information -->
    <database>
        <provider name="OleDb2.0"/>
        <dataSource name="Blogs" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../../../Files/Blogs.mdb"/>
    </database>

    <sqlMaps>
            <sqlMap resource="../../../Files/Maps/Access/Post.xml" />
          <sqlMap resource="../../../Files/Maps/Access/Blog.xml" />
        <sqlMap resource="../../../Files/Maps/Access/Author.xml" />
    </sqlMaps>

</sqlMapConfig>
复制代码

  一、properties节点性能

  properties节点一般用于引入在外部定义一些键值对配置文件,以方便在后面统一调用,这样修改的时候,只修改就能够了。

  它的引入方式有3种:

  •   resource: 经过相对路径来肯定文件的位置。
  •   url:     经过绝对路径来肯定文件位置。
  •   embedded:经过嵌入资源方式来肯定文件位置。

  <sqlMap embedded = "命名空间.文件名.后缀名, 命名空间"/>

  例如,你在外部的config文件中,定义了一个数据库链接

<?xml version="1.0" encoding="utf-8" ?>
<setting>
  <add key="connectionString" value="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/>
</setting>

  这样在SqlMap.config文件就能够这样写:

  <!--数据库链接字符串-->
  <database>
    <provider name="sqlServer2008"/>
    <dataSource name="Test" connectionString="${DataSource}"/>
  </database>

  二、Settings节点

  Settings节点里,能够配置如下5个信息:

  • useStatementNamespaces:默认flase,是否使用全局完整命名空间。
  • cacheModelsEnabled :默认true,是否启用缓存。
  • validateSqlMap:默认false,使用启用SqlMapConfig.xsd来验证映射XML文件。
  • useReflectionOptimizer:默认true,是否使用反射机制访问C#中对象的属性。
  • useEmbedStatementParams 是否使用嵌入的方式声明可变参数

  示例:

  <settings>
    <setting useStatementNamespaces="false"/>  --使用全局完整命名空间
  </settings>

  使用全局命名空间时,不一样的xml映射文件,id互不影响。若是出现提示出现 重复的sql Id的状况,大可能是没启用。若是启用,则执行sql语句时,要用命名空间.id的方式。这个理所固然要启用的。区分清楚点好,不然很容易出现xml 的 sql id重复的状况。

  三、Providers节点

  示例:

<providers resource="providers.config"/>

  这里使用引入外部配置文件的方式实现。

  四、alias节点

  alias节点用于为类指定一个别名,一般用于为一些很长的类名指定一个别名,这样能够减小一些代码。

<typeAlias alias="Person" type="iBatis.Domain.Person,iBatisSample"/>

  以上代码的意思是,为iBatis.Domain.Person类指定一个别名Person。Person就表明iBatis.Domain.Person这个类。

  起初我觉得别名只是起了缩短配置类的做用,但后来我发现别名是还有其余做用的,它还指明了IBatis.net应该到哪一个程序集去找实体类。

  若是程序偶尔报以下错误,那么你就要考虑加上别名了。

  “/”应用程序中的服务器错误。

  Could not load type from string value 'xxx'

<alias>
  <typeAlias alias="Field" type="Nx.Domain.Common.Field, Nx.Domain" />
</alias>

  Ibatis.Net有不少默认的别名:

  

  五、database节点

  指定一个你选择使用的数据库,和数据库链接。

  示例:

  <database>
    <provider name="sqlServer2008"/>
    <dataSource name="Test" connectionString="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/>
  </database>

  六、SqlMaps节点

  SqlMaps节点,用于配置映射信息。一般在映射信息写在外部,在这个节点引入。

4、映射文件

  映射文件与NHibernate相似,都是指定哪一个属性名,对于哪一个列名。不过貌似没有NHibernate那么复杂,东西貌似很少,不过也可能只是我了解得太少。

  下面来看看省略的写法(当property与column彻底相同时,能够这样写):

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Ibatis" xmlns="http://ibatis.apache.org/mapping" xmlns:xls="http://www.w3.org/2001/XMLSchema-instance">
  <statements>
    <select id="SelectAllPerson" resultClass="Ibatis.Net.Domain.PersonModel">
      select * from person
    </select>
  </statements>
</sqlMap>
复制代码

  下面再来看看所有写全的写法,为了展现不一样,我将Id和Name的属性名改成PersonId,PersonName:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Ibatis" xmlns="http://ibatis.apache.org/mapping" xmlns:xls="http://www.w3.org/2001/XMLSchema-instance">
  <resultMaps>
    <resultMap id="Person" Class="Ibatis.Net.Domain.PersonModel">   <!--id会被statements节点所用,Class实体类所在位置-->
      <result property="PersonId" column="Id"/>  <!--property实体类的属性名,column对应的列名-->
      <result property="PersonName" column="Name"/>
    </resultMap>
  </resultMaps>
  <statements>
    <select id="SelectAllPerson" resultMap="Person">  <!--id在程序中会被SqlMapper实体类所调用,resultMap就是resultMap节点的id-->
      select * from person
    </select>
  </statements>
</sqlMap>
复制代码

  resultMaps部分:定义了数据库字段名与实体类属性名之间的关系。固然,若是你数据库字段名与实体类属性名彻底同样,那么resultMaps部分是能够省略的。另外要注意一点,ResultMap的列比你查询的列不能少,也不能多。它不会说,ResultMap里映射的列多了,该属性就自动将select返回的列自动置null,而是直接全部列都不映射赋值。也就是说,Person表有Id,Name,Age3列,若是你只想要SELECT两个列(Id,Name),那么ResultMap里面的3列映射没用了,你必须另外搞一个ResulpMap只映射两列的。不爽。

  statements部分:用于定义你须要执行的语句,在程序中经过select的id调用。

 

属性

说明

parameterMap

参数映射,需结合parameterMap节点对映射关系加以定义,对于存储过程以外的statement而言,建议使用parameterClass做为参数配置方式,一方面避免了参数映射配置工做,另外一方面其性能表现更加出色

parameterClass

参数类。指定了参数类型的完整类名(包括命名空间),能够经过别名避免每次书写冗长的类名

resultMap

结果映射,需结合resultMap节点对映射关系加以定义

resultClass

结果类。指定告终果类型的完整类名(包括命名空间),能够经过别名避免每次书写冗长的类名

cacheModel

Statement对应的Cache模块

extends

重复使用SQL子句

  一、extends

  extends用于提取一段重复使用的SQL语句而避免重复书写

复制代码
<select id="SelectAllCustomers" resultMap="Customer">
   SELECT * FROM Customers
</select>

<select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer" extends="SelectAllCustomers">
   ORDER BY CustomerID
</select>
复制代码

  二、parameterMap的属性

  它能够接受三个属性,id/class/extends,其中是有id是必须的,class用于声明使用的实体类名称,能够是别名,也能够是全名,extends,可想而知,不解释
在它下一级节点中应该包含若干个parameter元素,来指定对象属性与当前变量的映射规则,parameter有以下经常使用属性:

  1. property:指定类中的一个属性
  2. columu:定义的参数名称
  3. direction:用于声明存储过程的参数方向(input,output,inputoutput)
  4. dbType:用于指定property映射到数据库中的数据类型
  5. type:用于为参数的对象指定CLR类型
  6. nullValue:指定在property为什么值时,将会在存储数据时候,替换为null,这是常常会被用到的
  7. size:用于指定最大值

  三、resultMap的属性

  它的属性不少是和parameterMap想对应的,可是值得一提的是它下面能够添加一个constructor元素来匹配一个构造函数。固然,这个的前提是Customers类中有这样一个构造函数。例如:

复制代码
<resultMaps>
  <resultMap id="Customer" class="Customers">
  <constructor>
    <argument argumentName="PersonId" column="PersonID"/>
    <argument argumentName="PersonName" column="PersonName"/>
  </constructor>
  <result property="PersonId" column="PersonID"/>
  <result property="PersonName" column="PersonName"/>
  </resultMap>
</resultMaps>
复制代码

  四、存储过程

  这里有一点区别就是,只可使用parameterMap,而不可使用parameterClass,其实想想,您难道还会为每个存储过程定义个传入的实体类吗?还有一点,就是他的参数彻底是按照 parameterMap中的定义自动匹配的。

<procedure id="demoProcedure" parameterMap="procedureDemo">
  CustOrderHist
</procedure>

 

  五、对SQL片断的引用

  在编写SqlMaps的时候,常常须要把一个SQL语句进行拆分,而后在不通的地方引用它咱们可使用sql和include的组合来完成。

复制代码
<sql id="order">
  ORDER BY PersonID
</sql>
<select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer">   SELECT * FROM Person   <include refid="test"/> </select>
复制代码

 



 

5、$与#的区别

    • SELECT * FROM TABLE WHERE Id = #id# 其中若是字段id为字符串类型,那么#id#表示的就是'id',也就是说会自动加引号。若是id为整型,那么#id#就是整型;
    • SELECT * FROM TABLE WHERE Id = $id$ ,若是字段id为整型,Sql语句就不会出错,可是若是字段id为字符串类型,那么Sql语句应该写成 SELECT * FROM TABLE WHERE Id = '$id$',不然会出错,由于它不会自动增长单引号。

 

 

转载自 http://www.cnblogs.com/kissdodog/p/3293381.html

相关文章
相关标签/搜索