• 初学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);
                }
            }
        }
    }
    

      

  • 相关阅读:
    ZT Android Debuggerd的分析及使用方法
    使用信号进行同步 sem_post
    linux c编程调用系统的动态库时,要使用dlopen等函数吗?
    Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
    linux的pthread_self与gettid的返回值和开销的区别
    转贴:参禅与悟道》——浅谈人生
    my target
    转贴:如何学好C++语言.docx
    [EffectiveC++]item24:若所有参数皆需类型转换,请为此采用non-member函数
    [EffectiveC++]item23:Prefer non-member non-friend functions to member functions
  • 原文地址:https://www.cnblogs.com/mingjia/p/4486507.html
Copyright © 2020-2023  润新知