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 ...
随机推荐
- 用 Fiddler查看 Android 网络请求
1. 下载安装 fiddler,尽量到官方网站找最新的版本 备注:安装后,打开的时候如果报错: Machine-wide Progress Telerik Fiddler installation h ...
- 修改bootstrap 的全局样式,bootstrap 3.0 是由html5和CSS 3组成的
方法一: 不建议使用 * {}选择器,因为在一些其他样式插件.特殊部分会有更好的字体样式设定,用*就会全部覆盖. 正常引入bootstrap的css样式后,记得将自定义的样式表放到其之后, <l ...
- What Drives the Need for Database Sharding? DATABASE SHARDING
wIO瓶颈 http://www.agildata.com/database-sharding/ What Drives the Need for Database Sharding? Databas ...
- JS实现数字千位符格式化方法
/** * [number_format 参数说明:] * @param {[type]} number [number:要格式化的数字] * @param {[type]} decimals [de ...
- TA-Lib函数对照
Overlap Studies 重叠研究指标 BBANDS Bollinger Bands 布林带 DEMA Double Exponential Moving Average 双指数移动平均线 EM ...
- shell export 命令
export 命令作用是 把变量导出 也可以用export来定义环境变量 导入 定义的变量 这样的话类似于python面向对象的self.变量 一样 在脚本到处调用这个变量
- ref out 区别
1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字.以满足匹配. 3.out适 ...
- 利用 TestNG 并行执行用例
原文地址https://testerhome.com/topics/1639 一.测试类*注1 package com.testerhome; import io.appium.java_client ...
- python学习之路-day10
一.什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程. 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程. 车间负责把资源 ...
- 安装memcached扩展 验证过了可行
. 安装libmemached 复制代码 代码如下: wget https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached ...