IBatisNet使用教程
Posted 很厉害的学渣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IBatisNet使用教程相关的知识,希望对你有一定的参考价值。
1、是数据持久层,对应.NET方向的有Ibatis.NET,只要用来处理数据库表结构和程序实体之间映射,ado.net是用来处理和数据库直接通信的,取出数据(object,int,string,dataset,datatable等常规类型),通常程序中如果用到MOEDL实体,都需要手动写代码去做类型转换(把datatable的字段赋值到model对应字段),用了数据持久层(直接和数据库打交道并保持同步的一个应用层次),这一部就可以省略了,Ibatis.NET可以直接把数据库表字段映射为实体模型,操作简便了。
2、IBatis.net 是2001年发起的开源项目,它是一个轻量级的ORM框架,现在IBatisNET已经是属于Apache下的一个子项目了。
3、DataMapper:通过配置映射关系的xml业务对象与SQL语句和存储过程进行映射.
4、DataAcces:简单的说就是IBatis的数据访问层.
5、 平常做企业级应用,需求变化是经常的事,而很多基础代码重复也是很让人头疼的问题。所以很多人会使用一些ORM框架来增强项目的可维护性、可扩展性。IBatis.Net就是一个比较易用的ORM框架,使用起来较为方便、灵活。IBatis.Net是从Ibatis的Java版本移植过来的.NET版本。iBATIS作为一种独特的Data Mapper,使用SQL映射的方式将对象持久化至关系型数据库。简单的理解就是它将我们在数据访问层实现的C#逻辑代码,变为通过关系数据库与对象的映射,将SQL逻辑放到外部的XML配置文件中,以方便以后的维护。
这个框架有两个主要的组成部分,一个是SQL Maps,另一个是Data Access Objects。Sql Maps是这个框架的核心部分,通过使用Sql Maps你可以显著的节约数据库操作的代码量。SQL Maps使用一个简单的XML文件来实现从实体到SQL statements的映射。使用DAO,封装了对数据的访问,你可以动态配置你的应用程序来访问不同的实体存储机制。隐藏持久性层实现的细节,Data Access Objects允许你通过一个简单接口的来操作数据。
1、新建项目
<?xml version="1.0" encoding="utf-8"?> <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- 常量属性,resource 通过单独文件properties.config加载--> <!--<properties resource="properties.config"/>--> <!--这个东西是变量用的,这里以最简单的实现说明,因此注释--> <!-- 常量属性,embedded 通过程序集资源中 加载 <properties embedded="database.config, IBatisNetDemo"/>--> <settings> <setting useStatementNamespaces="true"/> <!--是否启用命名空间--> </settings> <providers resource="providers.config"/> <!--引入数据库驱动文件--> <!-- Database connection information --> <!--数据库连接字符串--> <!--<database> --><!--<provider name="sqlServer2.0"/> <dataSource name="IBatisNet" connectionString="Data Source=DESKTOP-1ORC3PV;Initial Catalog=test;Integrated Security=True"/>--><!-- <provider name="oracleClient1.0"/> <dataSource name="IBatisNet" connectionString="Data Source=LHORCL;Persist Security Info=True;User ID=linsiontest;Password=123456;Unicode=True" providerName="System.Data.OracleClient"/> </database>--> <database> <provider name="OracleClient2.0"/> <dataSource name="orcl" connectionString="Data Source=HDORCL;Persist Security Info=True;User ID=oa;Password=oa;Unicode=True"/> </database> <sqlMaps> <!--节点就是配置一些sql语句以及实体映射的xml文件-->
<sqlMap resource="DataMap/SQLMap/ParameterClass.xml" /> <!--ParameterClass.xml--> <sqlMap resource="Maps/Account.xml" /> <!--这个是指定映射文件的位置--> </sqlMaps> </sqlMapConfig>
参数 |
描述 |
resource |
指定the properties文件从application的根目录进行加载 resource="properties.config" |
url |
指定the properties文件从文件的绝对路径进行加载 url="c:\\Web\\MyApp\\Resources\\properties.config" 或者 url="file://c:\\Web\\MyApp\\Resources\\properties.config" |
embedded |
指定文件可以作为程序集的资源文件进行加载\' embedded=" database.config, IBatisNetDemo” |
参数 |
描述 |
cacheModelsEnabled |
是否启用sqlMap上的缓存机制 Example: cacheModelsEnabled=”true” Default: true (enabled) |
useStatementNamespaces |
是否使用Satement命名空间,这里的命名空间指的是映射文件中sqlMap节点的namespace属性 Example: useStatementNamespaces=”false” Default: false (disabled) |
validateSqlMap |
是配置要不要启示SqlMapConfig.xsd schema验证映射文件. Example: validateSqlMap=”false” Default: false (disabled) |
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="User" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <resultMaps> <resultMap id="UserResult" class="User"> <result property="UserId" column="UserId" /> <result property="UserName" column="UserName" /> <result property="UserAge" column="UserAge" /> <result property="UserSex" column="UserSex" /> </resultMap> </resultMaps> <!--statement配置--> <statements> <select id="Exists" resultClass="int" parameterclass="User"> select count(1) from tbuser where UserId = #UserId# </select> <select id="SelectAllUser" resultMap="UserResult" parameterclass="User"> select * from tbuser where 1 = 1 </select> </statements> </sqlMap>
模块配置:在ParameterClass.xml中配置
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="ParameterClass" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <alias> <typeAlias alias="User" type="IBatisNetTest.Models.User" /> </alias> </sqlMap>
6、S_IBatisBase 类
using System; using System.Collections.Generic; using System.IO; using System.Reflection; using IBatisNet.DataMapper; using IBatisNet.DataMapper.Configuration; using IBatisNet.DataMapper.SessionStore; using IBatisNet.DataMapper.MappedStatements; using IBatisNet.DataMapper.Scope; namespace SystemFramework { public class S_IBatisBase { private static readonly IDictionary<string, ISqlMapper> dictMappers = null; private static volatile ISqlMapper mapper = null; public static ISqlMapper SqlMap { //get { return GetMapper("IBatisNetTest.Config.SqlMap.config", "IBatisNetTest"); } //程序集中加载 get { return GetMapper("DataMap/Config/SqlMap.config", ""); } } private static readonly object syncObj = new object(); /// <summary> /// 单例模式 /// </summary> static S_IBatisBase() { dictMappers = new Dictionary<string, ISqlMapper>(); } /// <summary> /// 实例化Oracle SqlMap对象 /// </summary> /// <param name="mapperName"></param> /// <param name="assemblyName"></param> /// <returns></returns> public static ISqlMapper GetMapper(string mapperName, string assemblyName) { if (string.IsNullOrEmpty(mapperName)) { throw new Exception("MapperName为空!"); } if (dictMappers.ContainsKey(mapperName)) { mapper = dictMappers[mapperName]; } else { if (mapper == null) { lock (syncObj) { if (mapper == null) { if (string.IsNullOrEmpty(assemblyName)) { #region 从本地配置文件中生成SqlMapper mapper = new DomSqlMapBuilder().Configure(mapperName); mapper.SessionStore = new HybridWebThreadSessionStore(mapper.Id); dictMappers.Add(mapperName, mapper); #endregion } else { #region 从资源中生成SqlMapper Assembly assembly = Assembly.Load(assemblyName); Stream stream = assembly.GetManifestResourceStream(mapperName); DomSqlMapBuilder builder = new DomSqlMapBuilder(); mapper = builder.Configure(stream); dictMappers.Add(mapperName, mapper); #endregion } } } } } return mapper; } /// <summary> /// 获取运行时SQL /// </summary> /// <param name="sqlMapper"></param> /// <param name="statementName"></param> /// <param name="paramObject"></param> /// <returns></returns> public static string GetRuntimeSql(ISqlMapper sqlMapper, string statementName, object paramObject) { string result = string.Empty; try { IMappedStatement statement = sqlMapper.GetMappedStatement(statementName); if (!sqlMapper.IsSessionStarted) { sqlMapper.OpenConnection(); } RequestScope scope = statement.Statement.Sql.GetRequestScope(statement, paramObject, sqlMapper.LocalSession); result = scope.PreparedStatement.PreparedSql; } catch (Exception ex) { result = "获取SQL语句出现异常:" + ex.Message; } return result; } } }
简单调用
public ActionResult test() { User user = new User(); user.UserId = 1; //string sql = S_IBatisBase.GetRuntimeSql(S_IBatisBase.SqlMap, "Exists", user); object objRtn = S_IBatisBase.SqlMap.QueryForObject("Exists", user); int i = Convert.ToInt32(objRtn); //string sql = S_IBatisBase.GetRuntimeSql(S_IBatisBase.SqlMap, "SelectAllUser", ""); IList<User> user1 = S_IBatisBase.SqlMap.QueryForList<User>("SelectAllUser", ""); return Json(user1); }
以上是关于IBatisNet使用教程的主要内容,如果未能解决你的问题,请参考以下文章