首先Hiberante,iBatis,MyBatis都是对数据访问的封装,最终都是生成sql语句访问数据库。
只不过Hibernate封装得比较全面,IBatis只是局部封装,懂Jdbc的程序员可以快速上手,而myBatis是近来流行的一种新的IBatis是对IBatis的升级,可以看着是升级版。
一般来讲,下述情况比较适合选择OR/M工具:
(1)对数据库有完全的控制。
(2)团队中没有数据库管理员;
(3)需要把数据库之外的问题域看做一个对表格;
而在下属情况,比较适合选择iBATIS:
(1)对数据库没有完全的控制,或者需要在数据库重构之后能够当做原来的数据库,继续合法访问这个它
(2)团队中有数据库管理员;
(3)数据库用于模拟问题域,应用程序的主要功能是帮助用户使用数据库模型。
简单MyIBatisDemo
1.添加引用:Castle.DynamicProxy.dll、IBatisNet.Common.dll、IBatisNet.Common.Logging.Log4Net.dll、IBatisNet.DataMapper.dll
到官网http://code.google.com/p/mybatisnet/ 下载相关dll和文档
2.Web项目根目录下添加Providers.config
<?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="sqlServer2.0"
enabled="true"
description="Microsoft SQL Server 2005, provider V2.0.50215.0 in framework .NET V2.0"
assemblyName="System.Data, Version=2.0.50215.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="@"
/>
</providers>
3.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">
<!--BAsic Setting About Configuration-->
<settings>
<setting useStatementNamespaces="false"/>
<setting cacheModelsEnabled="true"/>
<setting validateSqlMap="false" />
</settings>
<providers embedded="Providers.config,MyIbatisDemo_UI"/>
<!--<providers resource="providers.config"/>-->
<!--DataBase Connection Configuration-->
<database>
<provider name="sqlServer2.0" />
<dataSource name="sqlserver" connectionString="Data Source=GSHC-LIUHX\SQLSERVER;Initial Catalog=BaseCardDB2;Integrated Security=True" />
</database>
<sqlMaps>
<!--<sqlMap resource="ProductMap.xml"/>-->
<sqlMap embedded="ProductMap.xml,MyIbatisDemo_UI" />
</sqlMaps>
</sqlMapConfig>
4.数据库中添加数据库 并添加product表
5.项目中EntityModelModel添加product实体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EntityModel
{
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCompany { get; set; }
public DateTime SignDate { get; set; }
public DateTime UpdateData { get; set; }
}
}
6.BLL中新增Service
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EntityModel;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
namespace MyIbatisDemo_BL
{
public class ProductService
{
public void InsertProduct(Product getproduct)
{
ISqlMapper _getsqlManager = null;
DomSqlMapBuilder getdombuilder = new DomSqlMapBuilder();
if (getdombuilder != null)
_getsqlManager = getdombuilder.Configure("SqlMap.config") as SqlMapper;
_getsqlManager = Mapper.Instance();
if (_getsqlManager != null)
_getsqlManager.Insert("InsertProduct", getproduct);
}
}
}
7.添加映射文件ProductMap.xml:
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace = "EntityModel" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<statements>
<select id="GetAllProducts" parameterClass="string" resultClass="hashtable">
SELECT * FROM Product WHERE Product_Company = #companyname#
</select>
<insert id="InsertProduct" parameterClass="EntityModel.Product">
INSERT dbo.Product ( Product_Name ,Product_Company)
VALUES (#ProductName# , #ProductCompany#)
</insert>
<delete id="DeleteProduct" parameterClass="int" restultClass="int">
DELETE FROM dbo.Product WHERE ProductID=#ProductId#
</delete>
<update id="UpdateProduct" parameterClass="EntityModel.Product" restltClass="int">
UPDATE Product SET Product_Name=#ProductName# WHERE ProductID=#ProductId#
</update>
<select id="SelectAllProduct" resultClass="List">
SELECT * FROM Product
</select>
</statements>
</sqlMap>
5.前端新建页面 testWeb.aspx ->调用服务
项目结构总览:
http://www.cnblogs.com/yjmyzz/p/3362343.html
demo中只做了insert ,More Operation :http://noasoso.iteye.com/blog/1128635