一. 准备工作

  1. 点击此下载支持.Net4.0的 iBatis.Net,工程中引用release文件夹下的dll

    最新版(目前已不再更新),有稍作修改使其支持.NET4.0

  2. 点击此可查看 iBatis.Net 的帮助文档

  3. 点击此下载 iBatis in Action 的中文版电子书,作为参考

  4. 点击此可查看适用于.NET,基于 iBatis in Action 的中文翻译,作为参考

二. 相关代码文件介绍

  1. dao.config  dao支持配置

<?xml version="1.0" encoding="utf-8"?>
<daoConfig xmlns="http://ibatis.apache.org/dataAccess"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <providers resource="./config/ibatisNet/providers.config" /> <context id="SqlMapDao">
<properties embedded="psi.properties.config, psi"/> <database>
<provider name="MySql"/>
<dataSource name="psi" connectionString="${connectionString}" />
</database> <daoSessionHandler id="SqlMap">
<property name="resource" value="./config/ibatisNet/SqlMap.config"/>
</daoSessionHandler> <daoFactory>
<dao interface="psi.Persistence.MapperDao.Interfaces.IUserDao, psi"
implementation="psi.Persistence.MapperDao.Implementations.UserDao, psi"/>
</daoFactory>
</context> </daoConfig>

  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="MySql"
description="MySQL, MySQL provider 6.7.9.0"
enabled="true"
assemblyName="MySql.Data, Version=6.7.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection"
commandClass="MySql.Data.MySqlClient.MySqlCommand"
parameterClass="MySql.Data.MySqlClient.MySqlParameter"
parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"
parameterDbTypeProperty="MySqlDbType"
dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"
commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"
usePositionalParameters="false"
useParameterPrefixInSql="true"
useParameterPrefixInParameter="true"
parameterPrefix="?"
allowMARS="false"
/> </providers>

 

  3. 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" > <settings>
<setting useStatementNamespaces="true"/>
<setting cacheModelsEnabled="true"/>
<setting validateSqlMap="false"/>
</settings> <sqlMaps>
<sqlMap embedded="psi.Persistence.Maps.User.xml, psi"/>
</sqlMaps>
</sqlMapConfig>

  4. 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="connectionString"
value="Host=localhost;UserName=root;Password=123456;Database=psi;Port=3306;" />
</settings>

  5. DaoConfigManager.cs  程序启动时调用 DaoConfigManager.Instance(); 进行初始化

using IBatisNet.DataAccess;
using IBatisNet.DataAccess.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace psi.Persistence
{
public class DaoConfigManager
{
private static IDaoManager daoManager = null; public static IDaoManager GetSqlMapDao()
{
return Instance();
} public static IDaoManager Instance()
{
if (daoManager == null)
{
lock (typeof(DaoManager))
{
if (daoManager == null) // double-check
{
InitDao();
}
}
}
return daoManager;
} protected static void InitDao()
{
DomDaoManagerBuilder builder = new DomDaoManagerBuilder();
builder.Configure(".//config//ibatisNet//dao.config");
daoManager = DaoManager.GetInstance("SqlMapDao");
}
}
}

  6. BaseSqlMapDao.cs  对SqlMap的Dao操作进行的封装

using IBatisNet.Common.Pagination;
using IBatisNet.DataAccess;
using IBatisNet.DataAccess.DaoSessionHandlers;
using IBatisNet.DataAccess.Exceptions;
using IBatisNet.DataAccess.Interfaces;
using IBatisNet.DataMapper;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace psi.Persistence.MapperDao
{
/// <summary>
/// Summary description for BaseSqlMapDao.
/// </summary>
public class BaseSqlMapDao : IDao
{
protected const int PAGE_SIZE = ;
protected SqlMapper sqlMapper = null; /// <summary>
/// Looks up the parent DaoManager, gets the local transaction
/// (which should be a SqlMapDaoTransaction) and returns the
/// SqlMap associated with this DAO.
/// </summary>
/// <returns>The SqlMap instance for this DAO.</returns>
protected SqlMapper GetLocalSqlMap()
{
if (sqlMapper == null)
{
DaoManager daoManager = (DaoManager)DaoManager.GetInstance(this);
SqlMapDaoSession sqlMapDaoSession = (SqlMapDaoSession)daoManager.LocalDaoSession;
sqlMapper = (SqlMapper)sqlMapDaoSession.SqlMap;
}
return sqlMapper;
} /// <summary>
/// Simple convenience method to wrap the SqlMap method of the same name.
/// Wraps the exception with a DataAccessException to isolate the SqlMap framework.
/// </summary>
/// <param name="statementName"></param>
/// <param name="parameterObject"></param>
/// <returns></returns>
protected IList<T> ExecuteQueryForList<T>(string statementName, object parameterObject)
{
SqlMapper sqlMap = GetLocalSqlMap();
try
{
return sqlMap.QueryForList<T>(statementName, parameterObject);
}
catch (Exception e)
{
throw new DataAccessException("Error executing query '" + statementName + "' for list. Cause: " + e.Message, e);
}
} /// <summary>
/// Simple convenience method to wrap the SqlMap method of the same name.
/// Wraps the exception with a DataAccessException to isolate the SqlMap framework.
/// </summary>
/// <param name="statementName"></param>
/// <param name="parameterObject"></param>
/// <param name="skipResults"></param>
/// <param name="maxResults"></param>
/// <returns></returns>
protected IList ExecuteQueryForList(string statementName, object parameterObject, int skipResults, int maxResults)
{
SqlMapper sqlMap = GetLocalSqlMap();
try
{
return sqlMap.QueryForList(statementName, parameterObject, skipResults, maxResults);
}
catch (Exception e)
{
throw new DataAccessException("Error executing query '" + statementName + "' for list. Cause: " + e.Message, e);
}
} /// <summary>
/// Simple convenience method to wrap the SqlMap method of the same name.
/// Wraps the exception with a DataAccessException to isolate the SqlMap framework.
/// </summary>
/// <param name="statementName"></param>
/// <param name="parameterObject"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
protected IPaginatedList ExecuteQueryForPaginatedList(string statementName, object parameterObject, int pageSize)
{
SqlMapper sqlMap = GetLocalSqlMap();
try
{
return sqlMap.QueryForPaginatedList(statementName, parameterObject, pageSize);
}
catch (Exception e)
{
throw new DataAccessException("Error executing query '" + statementName + "' for paginated list. Cause: " + e.Message, e);
}
} /// <summary>
/// Simple convenience method to wrap the SqlMap method of the same name.
/// Wraps the exception with a DataAccessException to isolate the SqlMap framework.
/// </summary>
/// <param name="statementName"></param>
/// <param name="parameterObject"></param>
/// <returns></returns>
protected object ExecuteQueryForObject(string statementName, object parameterObject)
{
SqlMapper sqlMap = GetLocalSqlMap(); try
{
return sqlMap.QueryForObject(statementName, parameterObject);
}
catch (Exception e)
{
throw new DataAccessException("Error executing query '" + statementName + "' for object. Cause: " + e.Message, e);
}
} /// <summary>
/// Simple convenience method to wrap the SqlMap method of the same name.
/// Wraps the exception with a DataAccessException to isolate the SqlMap framework.
/// </summary>
/// <param name="statementName"></param>
/// <param name="parameterObject"></param>
/// <returns></returns>
protected int ExecuteUpdate(string statementName, object parameterObject)
{
SqlMapper sqlMap = GetLocalSqlMap(); try
{
return sqlMap.Update(statementName, parameterObject);
}
catch (Exception e)
{
throw new DataAccessException("Error executing query '" + statementName + "' for update. Cause: " + e.Message, e);
}
} protected int ExecuteDelete(string statementName, object parameterObject)
{
SqlMapper sqlMap = GetLocalSqlMap(); try
{
return sqlMap.Delete(statementName, parameterObject);
}
catch (Exception e)
{
throw new DataAccessException("Error executing query '" + statementName + "' for delete. Cause: " + e.Message, e);
}
} /// <summary>
/// Simple convenience method to wrap the SqlMap method of the same name.
/// Wraps the exception with a DataAccessException to isolate the SqlMap framework.
/// </summary>
/// <param name="statementName"></param>
/// <param name="parameterObject"></param>
/// <returns></returns>
protected object ExecuteInsert(string statementName, object parameterObject)
{
SqlMapper sqlMap = GetLocalSqlMap(); try
{
return sqlMap.Insert(statementName, parameterObject);
}
catch (Exception e)
{
throw new DataAccessException("Error executing query '" + statementName + "' for insert. Cause: " + e.Message, e);
}
}
}
}

  

  7. User.xml  Sql语句存放位置

<?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="user" class="psi.Domain.User">
<result property="guid" column="guid"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="password" column="password"/>
<result property="isLocked" column="isLocked"/>
<result property="flagOnline" column="flagOnline"/>
<result property="lastLoginTime" column="lastLoginTime"/>
<result property="loginCounter" column="loginCounter"/>
<result property="createDate" column="createDate"/>
<result property="createBy" column="createBy"/>
<result property="updateDate" column="updateDate"/>
<result property="updateBy" column="updateBy"/>
</resultMap> </resultMaps> <statements>
<select id = "getForLogin" parameterClass = "psi.Domain.User" resultMap="user">
select * from tb_user WHERE userCode=#userCode# AND password=#password#
</select> <update id="updateForLogin" parameterClass = "psi.Domain.User">
update tb_user SET flagOnline='Y',lastLoginTime=NOW(),loginCounter=IFNULL(loginCounter,)+
WHERE userCode=#userCode# AND password=#password#
</update>
</statements> </sqlMap>

  8. UserDao  数据访问接口

using IBatisNet.DataMapper;
using psi.Common;
using psi.Domain;
using psi.Persistence.MapperDao.Interfaces;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text; namespace psi.Persistence.MapperDao.Implementations
{
public class UserDao : BaseSqlMapDao, IUserDao
{
public void Login(User user)
{
if (string.IsNullOrWhiteSpace(user.userCode))
{
throw new Exception("帐户不能为空!");
} IList<User> list = ExecuteQueryForList<User>("User.getForLogin", user);
if (list == null || list.Count == )
{
throw new Exception("用户名或密码错误!");
}
user = list[];
if (user.isLocked == )
{
throw new Exception("用户已经锁定,禁止该用户登录!");
}
ExecuteUpdate("User.updateForLogin", user);
LoginLog log = new LoginLog();
log.userCode = user.userCode;
log.loginType = 'I';
ExecuteInsert("LoginLog.insertLog", log); }
}
}

三. 测试

  1. 前端控制器代码

User user = new User();
user.userCode = userCode;
user.password = password;
try
{
_bllUser.BeginTransaction();
_bllUser.Login(user);
_bllUser.CommitTransaction();
}
catch
{
_bllUser.RollBackTransaction();
throw new Exception();
}

  2. bllBase  业务逻辑处理基类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using psi.Common;
using IBatisNet.DataAccess;
using psi.Persistence; /*************************************************************************
* 程序说明: 业务逻辑层基类
**************************************************************************/
namespace psi.Business
{
/// <summary>
/// 业务逻辑层基类
/// </summary>
public abstract class bllBase
{
private IDaoManager daoManager;
protected IDaoManager DaoManager { get { return this.daoManager; } } public bllBase(){
daoManager = DaoConfigManager.GetSqlMapDao();
} public void BeginTransaction()
{
if (!daoManager.IsDaoSessionStarted())
daoManager.BeginTransaction();
} public void CommitTransaction()
{
daoManager.CommitTransaction();
} public void RollBackTransaction()
{
daoManager.RollBackTransaction();
}
}
}

  3. bllUser  业务逻辑处理代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using psi.Common;
using System.Data;
using psi.Persistence.MapperDao.Interfaces;
using psi.Persistence;
using IBatisNet.DataAccess;
using psi.Persistence.MapperDao.Implementations;
using psi.Domain; /*************************************************************************
* 程序说明: 用户管理的业务逻辑层
**************************************************************************/
namespace psi.Business
{
/// <summary>
/// 用户管理的业务逻辑层
/// </summary>
public class bllUser : bllBase
{
private IUserDao userDao; public bllUser()
: base()
{
userDao = DaoManager[typeof(IUserDao)] as IUserDao;
} public static void ValidateLogin(string userID, string password)
{
if (userID.Trim() == "")
throw new Exception("用户编号不正确或不能为空!"); if (password.Trim() == "")
throw new Exception("密码不正确或不能为空!");
} public void Login(User user)
{
userDao.Login(user); //用户实例,登录成功
Loginer loginer = new Loginer();
loginer.UserCode = user.userCode;
loginer.UserName = user.userName;
loginer.LoginTime = DateTime.Now; Loginer.CurrentUser = loginer;//保存当前用户
} }
}

  

基于.Net下整合IBatis的更多相关文章

  1. 基于.Net下整合FastReport,实现条码标签批量打印

    一. 准备工作 1. 点击此下载支持.Net4.0的 FastReport ,安装后并破解 2. VS2012 工具箱中,新建选项卡,添加 %安装目录%\Framework 4.0\FastRepor ...

  2. 基于.Net下整合RestSharp,实现REST服务客户端

    一. 准备工作 1. 点击此访问 RestSharp 官网,可作参考 2. VS2012 中安装支持.Net4.0的最新版 RestSharp 插件 工具---NuGet程序包管理器---程序包管理器 ...

  3. 团队软件开发_基于windows下截屏软件关于NABC框架的特点

    经过我们小组数次的激烈讨论,就自己的能力和时间而言,我们小组的初步的计划是开发一款基于windows下的截图软件. 关于这个软件的功能,我们初步的想法如下: 1.能在windows下后台运行,有相应的 ...

  4. Spring2.5整合Ibatis入门级开发实例

      分类: SPRING IBATIS2010-11-22 20:19 1170人阅读 评论(0) 收藏 举报 ibatisspringstringpropertiesclassuser 最近一直在看 ...

  5. paip.环境配置整合 ibatis mybatis proxool

    paip.环境配置整合 ibatis mybatis proxool  索引: ///////////1.调用 ///////////////2. ibatis 主设置文件  com/mijie/ho ...

  6. 基于SourceTree 下的 Git Flow 模型

    基于SourceTree 下的 Git Flow 模型 1. sourceTree  是一个开源的git 图形管理工具,可下载mac版本,windows版本 2. Git Flow 是一套使用Git进 ...

  7. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】

    基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...

  8. Spring整合Ibatis

    Spring整合Ibatis javaibatisspring 所需jar清单           ibatis-2.*.jar    *为任意版本,下同,ibatis工作包           sp ...

  9. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...

随机推荐

  1. linux centos 7 下安装ElasticSearch5.4

    一. 把elasticsearch-5.4.0.rpm和kibana-5.4.0-x86_64.rpm上传到centos下/root目录中,如下图:二.进入centos目录/root,并用命令rpm ...

  2. js判断手机端操作系统的两种方法

    //判断手机端操作系统(Andorid/IOS),并自动跳转相应下载界面 androidURL ="http://xxx/xxx.apk"; var browser = { ver ...

  3. 爬虫实战4:用selenium爬取淘宝美食

    方案1:一次性爬取全部淘宝美食信息 1. spider.py文件如下 __author__ = 'Administrator' from selenium import webdriver from ...

  4. HEOI 十二省联考退役记

    Day -1 简要的说了些注意事项 一整天都在刷树套树的水题 退役的感觉近了 Day 0 早上收拾好东西去了火车站之后 火车站居然还没有开门 等了半天 我们是从衡水到德州再到秦皇岛 到了德州之后 去车 ...

  5. 【JavaScript】__proto__和prototype的区别和联系【整理】

    var person={name:'ninja'}; person.prototype.sayName=function(){ return this.name; } Chrome运行结果: 提示找不 ...

  6. 【C#】自定义新建一个DataTable(3列),循环3维矩形数组往其填充数据

    从中可以了解DataTable的新增行和列;矩形多维数组循环机制;新建了DataTable DataTable dt = new DataTable(); DataColumn dc1 = new D ...

  7. 2016级算法期末上机-I.难题·ModricWang's Fight with DDLs III

    1126 ModricWang's Fight with DDLs III 思路 由于题目中已经说明了时间经过了正无穷,因此初始位置是不重要的,并且每条边.每个点的地位是均等的.因此到达每个点的概率就 ...

  8. 【性能测试】:JVM内存监控策略的方法,以及监控结果说明

    JVM内存监控主要在稳定性压测期间,监控应用服务器内存泄露等问题: [JVM远程监控设置] 1.打开WAS控制台:https://ip:port/ibm/console/login.do 2.进入路径 ...

  9. solr 服务搭建

    1.  linux 中 安装jdk,  tomcat, 2. 下载 solr-4.10.3.tgz.tgz 并解压 解压后文件夹:solr-4.10.3 3. 将 solr-4.10.3/dist 下 ...

  10. Q221 最大正方形

    在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 cla ...