首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

iBatis 动态创办sqlmap

2012-07-27 
iBatis 动态创建sqlmap前段时间做一个项目,需要用户输入数据库的url等,然后对这个数据库进行一些操作,当然

iBatis 动态创建sqlmap

前段时间做一个项目,需要用户输入数据库的url等,然后对这个数据库进行一些操作,当然那些数据库里面需要有一些表,还有字段等也跟我们的定义相符。

?

一般用iBatis都是事先配置好,系统启动的时候就会创建好连接池和SqlMap,但是我们这个应用就需要动态创建。我用的办法是,提供一个标准的sql-map-config文件作为模板,用户在页面上创建新的数据库以后,就操作这个sql-map-config文件,修改里面的url等信息,然后另存。然后再使用SqlMapClientBuilder.buildSqlMapClient(reader)的方法读这个配置文件生成新的sqlmap。

?

对于多个这种sqlmap,可以在创建以后保存到一个map里,根据url之类的信息生成一个key值,每次用的时候直接从map里面取。

?

其中,作为模板的sql-map-config文件如下,datasource里面只加了必要的参数,具体其他配置可以再根据需要添加:

?

?

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN""http://ibatis.apache.org/dtd/sql-map-config-2.dtd"><sqlMapConfig><settings useStatementNamespaces="true" /><typeAlias type="com.XXXX" alias="User" /><transactionManager type="JDBC"><dataSource type="SIMPLE"><property name="JDBC.Driver" value="cubrid.jdbc.driver.CUBRIDDriver" /><property name="JDBC.ConnectionURL" value=""/><property name="JDBC.Username" value=""/><property name="JDBC.Password" value=""/></dataSource></transactionManager><sqlMap resource="sqlmap/user.xml" /></sqlMapConfig>

?

相应的java修改xml文件,并创建sql的代码如下:

?

?

public static SqlMapClient getSqlMap(String url, String user,String password) {LOG.debug("Creating sqlmap fo url:{}, user:{}, password:{}", new String[]{url, user, password});                String template = "template-sql-map-config.xml";SqlMapClient sqlmap = null;try {SAXReader saxReader = new SAXReader();Document document = saxReader.read(Resources.getResourceAsReader(template));List urlNodeList = document.selectNodes("//property[@name='JDBC.ConnectionURL']" );Element urlElement = (Element)urlNodeList.get(0);urlElement.addAttribute("value", url);urlNodeList = document.selectNodes("//property[@name='JDBC.Username']" );Element userElement = (Element)urlNodeList.get(0);userElement.addAttribute("value", user);urlNodeList = document.selectNodes("//property[@name='JDBC.Password']" );Element pwdElement = (Element)urlNodeList.get(0);pwdElement.addAttribute("value", password);String newConfigFileName = "temp_" + template;File classesPath = Resources.getResourceAsFile(template).getParentFile();File tmpConfigFIle = File.createTempFile(newConfigFileName, ".xml", classesPath);XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(tmpConfigFIle));            xmlWriter.write(document);            xmlWriter.close();            Reader reader = Resources.getResourceAsReader(tmpConfigFIle.getName());tmpConfigFIle.deleteOnExit();sqlmap = SqlMapClientBuilder.buildSqlMapClient(reader);} catch (Exception e) {LOG.error(e.getMessage(), e);}return sqlmap;}
?

?

热点排行