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 ...
随机推荐
- CodeForeces 25E (kmp)
E. Test time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputst ...
- Java学习记录-Lambda表达式示例
List<Integer> userIds=userInfoList.stream().map(m->m.getUserId()).collect(Collectors.toList ...
- python及numpy,pandas易混淆的点
https://blog.csdn.net/happyhorizion/article/details/77894035 初接触python觉得及其友好(类似matlab),尤其是一些令人拍案叫绝不可 ...
- VirtualBox Guest Additions installation
在使用VirtualBox为CentOS安装增强功能时,输出是: 文本: Verifying archive integrity... All good. Uncompressing VirtualB ...
- NGINX:sticky模块实现基于cookie的负载均衡
Sticky模块 简述: 之前公司部署了一套网站及时发布系统,架构如下图所示:Nginx做前端代理,发布系统用tomcat运行,一台共享存储,一台数据库服务器:由于网站及时发布系统涉及到了用户登录操作 ...
- android 错误收集
2. is not translated in Eclipse > Preference > Android > Lint Error Checking的Correctness: M ...
- 【python】Python3 循环语句
[python]几种常见的循环 注意:如果涉及到程序中print语句中含有%d,%s,那么要在脚本最开始写语句:#coding=utf-8,才能够正常输出想要的数字或者字符串. Python3 循环语 ...
- 【云安全与同态加密_调研分析(7)】安全技术在云计算中的安全应用分析——By Me
我司安全技术在云计算中的安全应用分析 1. 基于云计算参考模型,分析我司安 ...
- 3.7 Templates -- Links
一.The {{link-to}} Helper 1. 使用{{link-to}}创建一个指向route的链接: app/router.js Router.map(function() { this. ...
- (转)JavaScriptSerializer,DataContractJsonSerializer解析JSON字符串功能小记
JsonAbout: using System;using System.Collections.Generic;using System.Linq;using System.Text;using S ...