初学MyBatis.net

1、MyBatis.net介绍

  MyBatis..net是一个简单,但是完整的ORM框架,它使你的实体对象与sql语句或者存储过程之间的映射变得很简单,并提供数据访问。包括两个主要框架

  DataAccess FrameWork和DataMapper FrameWork

  DataAccessObject Framework and DataMapper Framework are completely separate and are not dependent on each other in any way.Please feel  free to use either one separately,or both together.

2、MyBatis.net配置

 主要的配置文件

       providers.config:用来定义框架中用到的数据库引擎.

       SqlMap.config:数据库连接信息,数据映射xml文件信息,设置信息

      Default locations for the sqlMap.config and providers.config files

Windows, Library, or Test projects (using NUnit or    
equivalent)

This would be the binary folder (such as /bin/debug)
with the assembly (.dll) files and the App.config file

Web projects

In the application root, where the Web.config file is
located.

    当providers.config在默认的位置的时候,SqlMap.config中可以不用指定它的位置。

  主要的dll文件

    IBatisNet.Common.dll,IBatisNet.DataAccess.dll,在project或websit中添加引用即可。

 

3、MyBatis.net实战

 1、providers.config(eg.sqlserver2008)

<?xml version="1.0" encoding="utf-8"?>
<providers 
xmlns="http://ibatis.apache.org/providers" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<clear/>
  <provider
    name="sqlServer4.0"
    enabled="true"
    default="true"
    description="Microsoft SQL Server, provider V4.0.0.0 in framework .NET V4.0"
    assemblyName="System.Data, Version=4.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089"
    connectionClass="System.Data.SqlClient.SqlConnection"
    commandClass="System.Data.SqlClient.SqlCommand"
    parameterClass="System.Data.SqlClient.SqlParameter"
    parameterDbTypeClass="System.Data.SqlDbType"
    parameterDbTypeProperty="SqlDbType"
    dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
    commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
    usePositionalParameters = "false"
    useParameterPrefixInSql = "true"
    useParameterPrefixInParameter = "true"
    parameterPrefix="@"
    allowMARS="true"
    />
</providers>

2、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="properties.config"/>

  <settings>
    <setting useStatementNamespaces="true"/>
    <setting cacheModelsEnabled="true"/>
  </settings>
  
  <providers resource="providers.config"/>
  
  <!-- Database connection information -->
  <database>
	<provider name="${provider}"/>
	<dataSource name="MyDb" connectionString="${connectionString}"/>
  </database>

  <sqlMaps>
	<sqlMap resource="Maps/Account.xml" />
  </sqlMaps>

</sqlMapConfig>

3、properties.config

<?xml version="1.0" encoding="utf-8"?>
<settings>
  <!--   User application and configured property settings go here.-->
  <!--   Example: <add key="settingName" value="settingValue"/> -->

  <add key="provider" value="sqlServer4.0" />
  <!--Data Source=10.8.8.18;Initial Catalog=Ets_JinBaiWan;User ID=sa;Password=sa;Application Name=jituanyitaodian_web" />-->

  <!--<add key="connectionString" value="Data Source=59.151.43.221;Initial Catalog=FoodkingdomCN_MianAiMian20140429;User ID=etaoshi_master;Password=Tr1iV8Q7sY005" />-->
  <add key="connectionString" value="Server=.; User ID=sa;Password=sqltest;Database=TestDB;Persist Security Info=True" />
  <!--<add key="connectionString" value="Data Source=59.151.43.221;Initial Catalog=FoodkingdomCN_Yunhaiyao;User ID=etaoshi_master;Password=Tr1iV8Q7sY005" />-->

  <add key="root" value="../" />
</settings>

4、sqlserver2008中创建表

     

5、创建实体

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyBatisDemo.Model
{
    public class Accounts
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public float Money { get; set; }
        
        public DateTime CreateDate { get; set; }
    }
}

6、创建数据访问类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IBatisNet.Common.Utilities;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
using MyBatisDemo.Model;

namespace MyBatisDemo.Dao
{
    public class Mapper
    {
        private static volatile ISqlMapper _mapper = null;

        protected static void Configure(object obj)
        {
            _mapper = null;
        }

        protected static void InitMapper()
        {
            ConfigureHandler handler = new ConfigureHandler(Configure);
            DomSqlMapBuilder builder = new DomSqlMapBuilder();
            _mapper = builder.ConfigureAndWatch(handler);
        }

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

        public static ISqlMapper Get()
        {
            return Instance();
        }


        /// <summary>
        /// RealMarket Mapper
        /// </summary>
        public static ISqlMapper GetMaper
        {
            get
            {
                if (_mapper == null)
                {
                    lock (typeof(ISqlMapper))
                    {
                        if (_mapper == null)
                        {
                            ConfigureHandler hander = new ConfigureHandler(Configure);
                            DomSqlMapBuilder builder = new DomSqlMapBuilder();
                            _mapper = builder.ConfigureAndWatch("SqlMap.config", hander);
                        }
                    }
                }
                return _mapper;
            }
        }
    }

    public class AccountService
    {
        public int TestInsertOne(Accounts account)
        {
            Object obj = Mapper.GetMaper.Insert("Account.sql_InsertOne", account);
            return (int)obj;
        }

        public Accounts GetAccount(int id)
        {
            return (Accounts)Mapper.GetMaper.QueryForObject("Account.sql_selectByid", id);
        }

        public IList<Accounts> GetAccountList()
        {
            return Mapper.GetMaper.QueryForList<Accounts>("Account.sql_selectAll", null);
        }
    }
}

7、配置O/R Maping映射xml(Account.xml)

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Account" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <alias>
    <!-- alias:取别名
                    assembly:表示类所在的文件
                    type:表示该类的完整的名称
      -->
    <typeAlias alias="Account" assembly="MyBatisDemo.Model.dll" type="MyBatisDemo.Model.Accounts" />
  </alias>

  <resultMaps>
    <resultMap id="Account-result"  class="Account">
      <result property="Id"    column="id"/>
      <result property="Name"    column="name"/>
      <result property="Money"    column="money"/>
      <result property="CreateDate"    column="createdate"/>

    </resultMap>
  </resultMaps>

  <statements>
    <select id="sql_selectByid" resultMap="Account-result">
      select * from Account
      <dynamic prepend="where">
        <isParameterPresent property="id" prepend="">
          [id] = #id#
        </isParameterPresent>
      </dynamic>
    </select>

    <select id="sql_selectAll" resultMap="Account-result">
      select * from Account
    </select>

    <insert id="sql_InsertOne" parameterClass="Account">
      insert into Account (name,money,createdate)
      values
      (#Name#,
      #Money#,
      #CreateDate#
      )
      <selectKey  type="post" resultClass="int" property="Id">
        SELECT CAST(@@IDENTITY as int) as Id
      </selectKey>
    </insert>
  </statements>
</sqlMap>

  

8、程序调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MyBatisDemo.Dao;
using MyBatisDemo.Model;

namespace MyBatisDemo
{
    public partial class Test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Accounts account = new Accounts();
                account.Id = -1;
                account.Name = "qqp";
                account.Money = 100000;
                account.CreateDate = DateTime.Now;

                AccountService service = new AccountService();
                service.TestInsertOne(account);
                Response.Write("<script>alert('success')</script>");
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }
    }
}

  

原文地址:https://www.cnblogs.com/mingjia/p/4486507.html