//先建数据库
create database ibatis
use ibatis
create table ibatis(
id int primary key,
name varchar(19),
date datetime
)
insert into ibatis values(1,'name1',getdate());
insert into ibatis values(2,'name2',getdate());
//在创建iBatisNet网站应用
//在NuGet中搜索IbatisNet,引入IbatisNet.Common.dll与 IbatisNet.DataMapper.dll
//ibatis有三个很配置文件,
//providers.config:指定数据库提供者,.Net版本等信息。
//xxxxx.xml:映射规则。
//SqlMap.config:大部分配置一般都在这里,如数据库连接等等。
/**Windows应用项目或者类库项目中,需要放在项目的/bin/debug/目录下。在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引入的资源,还是从原来的默认目录开始找**/
----------------------------例子---------------------------------------
//providers文件,使用的是数据库sql server2008
<?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="sqlServer2008"
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>
//映射文件 *.xml
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="iBatisNet" xmlns="http://ibatis.apache.org/mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
<isEqual> 比较属性值和静态值或另一个属性值是否相等。
<isNotEqual> 比较属性值和静态值或另一个属性值是否不相等。
<isGreaterThan> 比较属性值是否大于静态值或另一个属性值。
<isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值。
<isLessThan> 比较属性值是否小于静态值或另一个属性值。
<isLessEqual> 比较属性值是否小于等于静态值或另一个属性值。
<isPropertyAvailable> 检查是否存在该属性(存在parameter bean的属性)
<isNotPropertyAvailable> 检查是否不存在该属性(不存在parameter bean的属性)
<isNull> 检查属性是否为null
<isNotNull> 检查属性是否不为null
<isEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(“”或size() < 1)
<isNotEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否不为null或不为空(“”或size() > 0)
<isParameterPresent> 检查是否存在参数对象(不为null)
<isNotParameterPresent> 例子:<isNotParameterPresent prepend=”AND”>EMPLOYEE_TYPE = ‘DEFAULT’</isNotParameterPresent>
-->
<!-- resultClass 直接设置返回的类型 -->
<!-- resultMap 通过映射设置返回类型 -->
<!--![CDATA[]禁止转义字符-->
<!--parameterClass传递的参数类型-->
<statements>
<select id="getIdModel" resultClass="iBatisNet.Model" parameterClass="int">
<![CDATA[select * from ibatis where id=#i#]]>
</select>
<select id="getAllModel" resultClass="iBatisNet.Model">
<![CDATA[select * from ibatis]]>
</select>
<insert id="insertModel" parameterClass="iBatisNet.Model">
<![CDATA[INSERT INTO IBATIS VALUES(#id#,#name#,#date#)]]>
</insert>
<delete id="deleteModel" parameterClass="int">
<![CDATA[delete from ibatis where id=#i#]]>
</delete>
<update id="updateModel" parameterClass="iBatisNet.Model">
<![CDATA[update ibatis set namE=#name#,date=#date# from ibatis where id=#id#]]>
</update>
</statements >
<statements>
<!--动态查询-->
<select id="getDynamic" resultClass="iBatisNet.Model" parameterClaa="iBatisNet.Model">
<![CDATA[select * from ibatis]]>
<!--dynamic 会自动去除第一个 prepend="and"中的内容-->
<dynamic prepend="where">
<!--判断参数id是否为null或"",不是则加上prepend的值与其内的语句-->
<isNotEmpty property="id" prepend="and">
<![CDATA[ id=#id#]]>
</isNotEmpty>
<isNotEmpty property="name" prepend="and">
<![CDATA[name=#name#]]>
</isNotEmpty>
</dynamic>
</select>
<select id="getDynamicIterate" resultClass="iBatisNet.Model" parameterClass="iBatisNet.Model">
<![CDATA[select * from ibatis]]>
<dynamic prepend="where">
<isNotEmpty property="id" prepend="and">
<![CDATA[id in]]>
<!--iterate表示执行集合-->
<iterate open="(" close=")" property="ary" conjunction=",">
<![CDATA[#ary[]#]]>
</iterate>
</isNotEmpty>
</dynamic>
</select>
</statements>
</sqlMap>
//全局配置文件
<?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>
<!--调用映射文件id是是否加上
<sqlMap namespace="iBatisNet" xmlns="http://ibatis.apache.org/mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
的命名空间
-->
<setting useStatementNamespaces="false"/>
</settings>
<!-- 设置 provider 文件的来源,这个文件一般直接使用 myBatisNet 提供的文件 -->
<!--这里使用的 provider 需要在 providers.config 中设置为启用
enabled="true"-->
<providers resource="providers.config"/>
<!--数据库连接字符串-->
<database>
<provider name="sqlServer2008"/>
<dataSource name="iBatisNet" connectionString="Data Source=127.0.0.1;Initial Catalog=ibatis;User ID=sa;Password=1"/>
</database>
<!--指向映射文件-->
<sqlMaps>
<sqlMap resource="MapFile.xml" />
</sqlMaps>
</sqlMapConfig>
//对象模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace iBatisNet
{
public class Model
{
public int id { get; set; }
public string name { get; set; }
public DateTime date { get; set; }
public int[] ary {get;set;}
}
}
//程序执行的入口文件
using IBatisNet.DataMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace iBatisNet
{
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int i=2;
//动态查询
List<Model> modelDs = (List<Model>)Dal.GetDynamic<Model>("getDynamic", new Model { id = 2,name="name2" });
//传数组
int[] ary = new int[]{1,2,3 };
List<Model> modelIteraet = (List<Model>)Dal.GetDunamicIteraet<Model>("getDynamicIterate", new Model() { ary =new int[]{ 1,2} });
//查所有
//getAllModel与映射文件的<select id="getAllModel">对应
List<Model> models = (List<Model>) Dal.GetAllModel<Model>("getAllModel");
//根据id查数据
Model model = Dal.GetModel<Model>("getIdModel", 2);
//新增
//Dal.Insert("insertModel", new Model() {id=4,name="name3",date=DateTime.Now });
//删除
//Dal.Delete("deleteModel",i=4);
//修改
Dal.Update("updateModel",new Model {id=3,name="newname3",date=DateTime.Now });
}
}
}
//index.aspc.cs文件调用的方法,方法名一一对应
using IBatisNet.DataMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace iBatisNet
{
public class Dal
{
public static ISqlMapper instance()
{
ISqlMapper mapper =Mapper.Instance();
return mapper;
}
internal static T GetModel<T>(string v1, int v2)
{
return instance().QueryForObject<T>(v1,v2);
}
internal static IList<T> GetAllModel<T>(string v, object parameterObject = null)
{
return instance().QueryForList<T >(v,parameterObject);
}
internal static IList<T> GetDunamicIteraet<T>(string v1, object v2)
{
return instance().QueryForList<T>(v1,v2);
}
internal static void Insert<T>(string v, T model)
{
instance().Insert(v, model);
}
internal static void Delete(string v1, int v2)
{
instance().Delete(v1,v2);
}
internal static IList<T> GetDynamic<T>(string v, T model)
{
return instance().QueryForList<T>(v,model);
}
internal static void Update<T>(string v, T model)
{
instance().Update(v, model);
}
}
}
c#使用iBatisNet例子复习
最新推荐文章于 2024-04-16 22:08:29 发布