ibatis.net 实现多数据库配置
1.1 功能介绍
使用ibatis.net ORM框架时,有时候需要操作多个数据库,同时有时候也需要对连接数据库信息进行加密,本文通过将配置连接写到Web.config中,
这样就可以在Web.config中加密,在读取的地方再解密使用。
下面是具体的配置方法,有更好方法的也欢迎指出, 对于ibatis.net 使用基础知识,请参照其他资料
1.2 配置流程
(1)先配置sqlmap.config中database结点,随便设置一个值,后面会重新设置这个连接值
<database>
<provider name="sqlServer2005"/>
<!--先随便设置一个假连接,后面会重新赋值-->
<dataSource name="iBatisNet" connectionString="data source=11;database=11;user id=11;password=11;connection reset=false;connection lifetime=5; min pool size=1; max pool size=50"/>
</database>
(2)创建2个操作SqlMap的实体类(我这里分主库、中间库2个数据库)
//用于操作主库
public class BaseDao
{
public static readonly BaseDao Instance = new BaseDao();
private static ISqlMapper sqlMap;
/// <summary>
///
/// </summary>
public BaseDao()
{
try
{
//加载当前所在的程序集
string sAssembly = this.GetType().Assembly.GetName().Name;
Assembly assembly = Assembly.Load(sAssembly);
string sqlMapPath = sAssembly + ".Config.sqlmap.config";
Stream stream = assembly.GetManifestResourceStream(sqlMapPath);
DomSqlMapBuilder builder = new DomSqlMapBuilder();
sqlMap = builder.Configure(stream);
//读取数据库连接串,设置为自定义字符串(如果加密,则需要先解密)
string connString = System.Configuration.ConfigurationManager.AppSettings["MasterDB"];
sqlMap.DataSource.ConnectionString = connString;
}
catch (System.Exception ex)
{
throw ex;
}
}
/// <summary>
/// 供外层使用的数据操作对象
/// </summary>
public ISqlMapper SqlMap
{
get
{
return sqlMap;
}
}
}
public class MiddleBaseDao
{
public static readonly MiddleBaseDao Instance = new MiddleBaseDao(); private static ISqlMapper sqlMap; public MiddleBaseDao()
{
try
{
//加载当前所在的程序集
string sAssembly = this.GetType().Assembly.GetName().Name;
Assembly assembly = Assembly.Load(sAssembly);
//加载sqlmap.config
string sqlMapPath = sAssembly + ".Config.sqlmap.config";
Stream stream = assembly.GetManifestResourceStream(sqlMapPath);
DomSqlMapBuilder builder = new DomSqlMapBuilder();
sqlMap = builder.Configure(stream);
//读取数据库连接串,设置为自定义字符串(操作中间库)
string connString = System.Configuration.ConfigurationManager.AppSettings["MiddleDB"];
sqlMap.DataSource.ConnectionString = connString;
}
catch (System.Exception ex)
{
throw ex;
}
} /// <summary>
/// 供外层使用的数据操作对象
/// </summary>
public ISqlMapper SqlMap
{
get
{
return sqlMap;
}
} }
(3)使用的时候就可以根据不同的数据库操作,调用不同的SqlMap类
public IList<DmsSysPost> FindByCondExt(DmsSysPost obj) {
return BaseDao.Instance.SqlMap.QueryForList<DmsSysPost>("DmsSysPost_FindByCondExt", obj);
}
public IList<DmsSysPost> FindByCondExt(DmsSysPost obj) {
return MiddleBaseDao.Instance.SqlMap.QueryForList<DmsSysPost>("DmsSysPost_FindByCondExt", obj);
}
(4)最后在Web.config中配置一下2个连接串即可,到此配置完成
<appSettings>
<!--主数据库(可以加密)-->
<add key="MasterDB" value="data source=.;database=MasterDB;user id=;password="/>
<!--中间库-->
<add key="MiddleDB" value="data source=.;database=MiddleDB;user id=;password="/>
</appSettings>
1.3 参考资料
http://blog.csdn.net/isprotect/article/details/8806974
ibatis.net 实现多数据库配置的更多相关文章
- iBATIS的多对多 数据库设计及实现
iBATIS的多对多映射配置方法和多对一映射配置方法差不多,不同的是,多对多映射,数据库设计上需要一个记录两个类关系的中间表,本文以学生-老师为例,在iBATIS的sqlmap中配置多对多关系. iB ...
- Spring+MyBatis双数据库配置
Spring+MyBatis双数据库配置 近期项目中遇到要调用其它数据库的情况.本来仅仅使用一个MySQL数据库.但随着项目内容越来越多,逻辑越来越复杂. 原来一个数据库已经不够用了,须要分库分表.所 ...
- laravel5 数据库配置(MySQL)
laravel5 数据库配置(MySQL) 首先有一个安装完成可以运行的laravel框架. 配置database.php 进入laravel根目录. 在config目录下找到database.php ...
- discuz论坛移植修改数据库配置
从其他地方拷贝的discuz源码,可能需要修改数据库配置 分别打开discuz目录下面以下三个文件 discuzRoot/uc_server/data/config.inc.phpdiscuzRoot ...
- Spring 数据库配置用户名和密码加密
单个数据库配置 : 一般spring容器启动时,通过PropertyPlaceholderConfigurer类读取jdbc.properties文件里的数据库配置信息.通过这个原理,我们把加密后的数 ...
- atitit.动态加载数据库配置in orm hibernate mybatis
atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象, ...
- 如何修改opencms数据库配置
修改/webapps/opencms/WEB-INF/config/opencms.properties文件 什么情况下需要修改配置? 1. 使用过程中,修改数据库配置: 2. 太长时间没接触服务器, ...
- ThinkPHP讲解(五)——数据库配置及Model数据模型层、查询
数据库配置 在TP框架中要进行连接数据库操作,要进行配置 要在convertion.php中找到“数据库配置”,并复制到项目配置文件config.php中 Model模型层制作 model:数据库中每 ...
- tomcat字符,文档,数据库配置
修改tomcat目录下conf目录下的server.xml tomcat容器的解码配置 URIEncoding="UTF-8" <Connector port="8 ...
随机推荐
- Log4Net的简单使用
在前面的随笔中,已经异常处理过滤器中,我们已经将获取到的错误信息写到队列中去,然后又单独的线程对队列中的错误信息处理,将错误信息输出到制定的文件中,但是如果我们需要改变需求,打算将错误信息输出到数据库 ...
- Haskell ghci中调用pandoc的API进行markdown转换
所用环境:Windows Server 2008 + ghc 7.6.3(Haskell Platform 2013.2.0.0自带的) + pandoc 1.12.4 操作步骤: 1. 安装Hask ...
- idea 之git使用详细教程
安装 选择VersionControl下的Git,依据下图进行git配置 使用 荡项目 从VCS菜单选择checkout from version control-->git 更新项目 ...
- NAT STURN,ICE
NAT原理与NAT穿越 最近在看东西的时候发现很多网络程序中都需要NAT穿越,特意在此总结一下. 先做一个约定: 内网A中有:A1(192.168.0.8).A2(192.168.0.9)两用户 网关 ...
- 程序入口函数和glibc及C++全局构造和析构
分类: CRT Machnasim 2011-06-15 17:45 144人阅读 评论(0) 收藏 举报 c++汇编linuxlist语言编译器 1,程序入口函数和初始化 操作系统在装载可执行文件后 ...
- Currency Exchange---poj1860 ( spfa, 回路,最长路)
题目链接:http://poj.org/problem?id=1860 题解: 两种情况YES,一种是存在正权回路: 一种是求最长路后,实现了增值,也是YES: 用spfa来判断是否存在正权回路,其实 ...
- Shape of passed values is (3490, 21), indices imply (3469, 21)
背景 处理DataFrame数据时,抛了这个错误:Shape of passed values is (3490, 21), indices imply (3469, 21) 解决 数据出现重复,导致 ...
- Mybatis的WHERE和IF动态
mapper.xml: <!--查询套餐产品 --> <select id="queryComboProducts" resultType="com.r ...
- [css]单/多行居中&字体设置
行高和字号 行高 CSS中,所有的行,都有行高.盒模型的padding,绝对不是直接作用在文字上的,而是作用在"行"上的. line-height: 40px; 文字,是在自己的行 ...
- 如何确定selenium ID元素是否查找正确
编写脚本时,如何确定通过id查找的id是否真实存在,点击css,然后输入#(代表id)id名,如#kd,回车之后,能返回结果,便代表存在.