IBatisNet使用方法
1。先交代一下何为IBatisNetIBatisNet是一个ORM(Object Relational Mapping,对象关系映射)框架,着重于ORM中的M(Mapping),通过使用XML文档在sql语句和实体对象之间建立映射。是IBatis的.NET版本 2 。IBatisNet配置文件详解 SqlMap.config Map配置文件<?xml version="1.0" encoding="utf-8"?> <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <settings> <setting useStatementNamespaces="false"/> 是否使用sqlMap节点中的namespace <setting cacheModelsEnabled="true"/> 是否启用缓存机制 <setting validateSqlMap="false"/> 是否需要使用SqlMapConfig.xsd schema验证隐射 </settings> <database> <provider name="sqlServer1.1"/> provider获取providers.config中对应的属性 <dataSource name="ConnectString" connectionString="server=.;database=Test;user id=sa;password=sa;Connection Reset=FALSE;Min Pool Size=1;Max Pool Size=100"/> 数据库链接 </database> <sqlMaps><sqlMap resource="maps/Member.xml"/> Map文件加载的路径,如果要加载多个,按此格式写下去 </sqlMaps></sqlMapConfig>2.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="sqlServer1.0" enabled="false" assemblyName="System.Data, Version=1.0.3300.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="@" /> <provider name="sqlServer1.1" enabled="true" assemblyName="System.Data, Version=1.0.5000.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>
可以获取官方文件,获得相应数据库的provider
1。先交代一下何为IBatisNetIBatisNet是一个ORM(Object Relational Mapping,对象关系映射)框架,着重于ORM中的M(Mapping),通过使用XML文档在sql语句和实体对象之间建立映射。是IBatis的.NET版本 2 。IBatisNet配置文件详解 SqlMap.config Map配置文件<?xml version="1.0" encoding="utf-8"?> <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <settings> <setting useStatementNamespaces="false"/> 是否使用sqlMap节点中的namespace <setting cacheModelsEnabled="true"/> 是否启用缓存机制 <setting validateSqlMap="false"/> 是否需要使用SqlMapConfig.xsd schema验证隐射 </settings> <database> <provider name="sqlServer1.1"/> provider获取providers.config中对应的属性 <dataSource name="ConnectString" connectionString="server=.;database=Test;user id=sa;password=sa;Connection Reset=FALSE;Min Pool Size=1;Max Pool Size=100"/> 数据库链接 </database> <sqlMaps><sqlMap resource="maps/Member.xml"/> Map文件加载的路径,如果要加载多个,按此格式写下去 </sqlMaps></sqlMapConfig>2.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="sqlServer1.0" enabled="false" assemblyName="System.Data, Version=1.0.3300.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="@" /> <provider name="sqlServer1.1" enabled="true" assemblyName="System.Data, Version=1.0.5000.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>
可以获取官方文件,获得相应数据库的provider
解决方案 »
- c#中如何将文本框中的数据赋值给二维数组
- 对对web加密:aspnet_regiis -pef connectionstrings ...请进入指点
- C++代码,怎么在C#中使用
- 帮忙看看这个删除XML文件节点的语句,如果带单引号“'”怎么解决??
- 高分求教使用过SqlHelper的高手们过来
- c#更新问题
- C#播放器如何实现歌词下载功能
- 感觉oracle的插入语句就是那么不一样。
- C# Winform 右击按钮获取按钮属性 contextmenustrip
- 新手的问题:请问怎样把汉字字符串变为可以发送到串口的byte类型?
- 请问C# 如何调用DLL中类的方法?
- C# 读取网页html源文件问题,在线等!
Member.xml
<?xml version="1.0" encoding="utf-8" ?><sqlMap namespace="MemberInfo" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">namespace就是useStatementNamespaces对应的namespace <alias> <typeAlias alias="Member" 此map映射的类名 assembly="ETest.dll" 引用的程序集type="ETest.test.Member" 对应项目中的累 /> </alias> <resultMaps> 返回的所有结果类 <resultMap 返回的一个结果类id="MemberMap" id,对应下面select等语句返回的mapclass="Member"> 对应alias中映射的类名 <result property="Name" 对应alias中映射的类的属性column="Name" /> 对应返回结果中的列表对应到类的属性 <result property="CardNO" column="CardNO" /> 为了解释采用这种格式,见谅 </resultMap> </resultMaps> <statements> <select id="SelectMember" 方法id,在程序中被调用resultMap="MemberMap" 对应resultMap中相应的idparameterClass="int"> 参数集合,如为int,string等单值,则语句中 参数位置使用#value# SELECT CardNo,Name FROM Member Where UserID = #value# </select> <update id="SaveMember" parameterClass="Member" 参数集合Member,对应相应操作的类 resultClass="int"> UPDATE Member set CardNo = #CardNo#, #CardNo#对应 Member的属性CardNoName =#Name# #Name#对应Member的属性Namewhere UserID =#UserID# #UserID#对应 Member的属性UserID </update> <delete id="DeleteMember" parameterClass="int"> delete from Member where UserID = #value# </delete> </statements> </sqlMap>
namespace ETest.test { [Serializable] public class Member { Member类,包括属性存取 private int _user_ID; private string _name; private string _cardNO; public string CardNO { get { return _cardNO; } set { _cardNO = value; }}public string Name { get { return _name; } set { _UserName = value; }} public int User_ID { get { return _user_ID; } set { _user_ID = value; }} }public class MemberLogic 相关逻辑类,包含所有逻辑{ private SqlMapper mapper = null; public MemberLogic () { 构造函数 DomSqlMapBuilder builder = new DomSqlMapBuilder(); mapper = builder.Configure(); mapping } public Member Select(int User_ID) { return (Member)mapper.QueryForObject("SelectMember", User_ID); map的自有方法,返还Member.xml中id为“SelectMember”的执行结果,返还结果为对象 } public void Update(Member member) { mapper.Update("SaveMember", member); map的自有方法,直接对应 Member.xml中id为“SaveMember”的执行. } public void Delete(int User_ID) { mapper.Update("DeleteMember ", member); map的自有方法,直接对应 Member.xml中id为“DeleteMember”的执行. } }
这个是如何操作存储过程
先写个简单的存储过程
create proc InsertMember( @UserID int, @Cardno nvarchar(50), @Name nvarchar(10)) asbegin insert memeber select @Cardno,@Name select @UserID=@@identityend 以下文件配置在Member.xml中进行操作存储过程
[code=XML]<procedure id="InsertMember" 存储过程名称 parameterMap="Member_Par" 对应的parameterMap,接来下马上登场 resultClass="int"> 返回值,同正常返回值 InsertMember</procedure>在procedure 中必须设置parameterMap属性,即使存储不带任何参数也需要设置一下。对应的parameterMap:<parameterMaps> <parameterMap id=" Member_Par" 对应 procedure中的parameterMap class="Member"> 对应的类Member <parameter property="CardNo" 对应类中属性 column="CardNo" 对应参数的属性 dbType="NVARCHAR" 数据库字段类型 type="string" 自动类型 direction="INPUT" /> 参数类型 <parameter property="Name" 对应类中属性 column="Name" 对应参数的属性 dbType="NVARCHAR" 数据库字段类型 type="string" 自动类型 direction="INPUT" /> 参数类型 <parameter property="User_ID" 对应类中属性 column="User_ID" 对应参数的属性 dbType="INT" 数据库字段类型 type="int" 自动类型 direction="INPUTOUTPUT" /> 返回值参数 </parameterMap> </parameterMaps>
动态sql写法
<dynamic prepend ="WHERE"> 表示动态sql开始,如果关联表 prepend ="AND",可以为"" <关键字 <!—关键字可以为以下 相关含义 <isEqual> 参数等于值 <isNotEqual> 参数不等于值 <isGreaterThan> 参数大于值 <isGreaterEqual> 参数大于等于值 <isLessEqual> 参数小于等于值 <isPropertyAvailable> 参数被使用 <isNotPropertyAvailable> 参数没有使用 <isNull> 参数 is null <isNotNull> 参数 is not null <isEmpty> 参数为空 <isNotEmpty> 参数不为空 <isParameterPresent> 参数类不为NULL <isNotParameterPresent> 参数类为NULL -- > prepend="AND" 连接关键字 property="UserID" 参数 compareValue="20"> 值,也可以为属性名来比较
1.相关sql ,就是动态sql要添加的条件,比如:
Name =#value# 2.重复元素,这个属性适合一个集合,比如SQL中的in 后的集合等 <iterate prepend="AND" 连接关键字 property="NameList" 参数 open="(" open后的串为开始括号作用“(” close=")" close后的串为结束括号作用“)” conjunction="OR"> 连接方式 AND 或OR,每个元素之间的符号 Name=#NameList[]# </iterate> --以上相当与SQL And Name = (/open #NameList[0] or/conjunction #NameList[1] or ….)/close </关键字> </dynamic>