转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
自己搞的在oralce下动态生成IBATIS的sqlMap文件小工具         

自己搞的在oralce下动态生成IBATIS的sqlMap文件小工具

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2520 更新时间:2007/11/14 12:53:57
如果需要完整的代码或建议可以发到zhoubikui@eyou.com。

metadata类,可以在oralce下的取得相应的数据表信息,并生成文件sqlMap文件
* 目前可以生成IBATIS从数据库表到IBATIS sqlMAP类型主要有SELECT,INSERT,UPDATE
* 因项目太急,只是临时自己使用,没有开发RESULTMAP和PARAMETERMAP生成
* 下步计划开发这个工具,并把它图形化,先听一下各位的意见,希望与各位交流。
* 调用该程序,只需调用getMetaData()方法即可
* 数据库配置见cn/com/mofit/demo/system/dao/maps/sqlMap-config.xml,
* 修改当前目录下的jdbc.properties数据库配置就可使用

其主类实现方法是:
package cn.com.mofit.util.jdbc;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.SqlMapClientTemplate;

import cn.com.mofit.util.spring.orm.ibatis.SqlMapDaoSupportPlus;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.engine.builder.xml.XmlSqlMapClientBuilder;

/**
*
* @author 周必奎
* 2004-10-15
* @email:zhoubikui@eyou.com
* @deprecated metadata类,可以在oralce下的取得相应的数据表信息,并生成文件sqlMap文件
* 目前可以生成IBATIS从数据库表到IBATIS sqlMAP类型主要有SELECT,INSERT,UPDATE
* 因项目太急,只是临时自己使用,没有开发RESULTMAP和PARAMETERMAP生成
* 下步计划开发这个工具,并把它图形化,先听一下各位的意见,希望与各位交流。
* 调用该程序,只需调用getMetaData()方法即可
* 数据库配置见cn/com/mofit/demo/system/dao/maps/sqlMap-config.xml,
* 修改当前目录下的jdbc.properties数据库配置就可使用
*/
public class RsMetaDataOracle {
/*
* filePath SQLMAP文件生成的路径名,是绝对路径
*/
private String filePath = "c:/";

/*
* mapTablename 要映射的数据库的表名
*/
private String mapTablename = "BK_BILL";

//System.getProperty("user.dir") + "/config/sqlmap/";
private static SqlMapClientTemplate sqlTemp;
static {
try {
SqlMapDaoSupportPlus sqlsu = new SqlMapDaoSupportPlus();

String resource = "cn/com/mofit/demo/system/dao/maps/sqlMap-config.xml";
Reader read;
read = Resources.getResourceAsReader(resource);

XmlSqlMapClientBuilder xmlBuilder = new XmlSqlMapClientBuilder();
SqlMapClient sqlMap = xmlBuilder.buildSqlMap(read);

sqlsu.setSqlMapClient(sqlMap);
sqlsu.afterPropertiesSet();
sqlTemp = sqlsu.getSqlMapClientTemplate();

} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e) {

e.printStackTrace();
}

}

private static SqlMapClientTemplate getSqlMapTempInstance() {
return sqlTemp;
}

public void getMetaData() throws DataAccessException {
try {
//DaoCommon.startTransaction();
SqlMapClientTemplate sqlTemp = RsMetaDataOracle
.getSqlMapTempInstance();

//SqlMap sqlMap = DaoCommon.getSqlMap(this);
Connection conn = sqlTemp.getDataSource().getConnection();
Statement stmt = conn.createStatement();
List list = getTableNames();

for (Iterator iter = list.iterator(); iter.hasNext()Wink {
String element = (String) iter.next();

ResultSet rs = stmt.executeQuery("select * from " + element);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
if (element.startsWith(mapTablename.toUpperCase())) {

File file = new File(filePath);

if (!file.exists()) {
file.mkdir();
}

file = new File(filePath + element.toLowerCase() + ".xml");

String xml = "<?xml version=\"1.0\" encoding=\"GBK\" ?>\n";
xml += "<!DOCTYPE sql-map\n";
xml += "PUBLIC \"-//iBATIS.com//DTD SQL Map Config 2.0//EN\" \n";
xml += "\"http://www.ibatis.com/dtd/sql-map-2.dtd\">\n";
xml += ("<sql-map namespace=\"" + element.toLowerCase() + "\">\n");
xml += getXml(rsmd, numberOfColumns, element);
xml += "\n</sql-map>";

FileWriter writer = new FileWriter(file);
writer.write(xml);
writer.flush();
writer.close();
}
}
} catch (DataAccessException e) {
e.printStackTrace();
} catch (SQLException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}

private String getXml(ResultSetMetaData rsmd, int numberOfColumns,
String tableName) throws SQLException {
String result = "";
result += (createfindSql(rsmd, numberOfColumns, tableName));
result += (createInsertSql(rsmd, numberOfColumns, tableName));
result += (createUpdateSql(rsmd, numberOfColumns, tableName));
return result;
}

private String createfindSql(ResultSetMetaData rsmd, int numberOfColumns,
String tableName) throws SQLException {
String result;
result = "<!-- =============================================\n mapped-statement find \n============================================= -->";

result += ("\n<select id=\"find" + tableName.toLowerCase() + "Dao\" resultClass=\"java.util.HashMap\">");

result += ("\n select $listfield$ from " + tableName + "\n <dynamic prepend=\"where\">");

result += createWhereSql(rsmd, numberOfColumns, "and", 1);
result += "\n </dynamic>";
result += "\n</select>\n\n\n";
return result;
}

private String createColumnsString(ResultSetMetaData rsmd)
throws SQLException {
String result = "";
int numberOfColumns = rsmd.getColumnCount();
for (int i = 1; i <= numberOfColumns; i++) {
String colName = rsmd.getColumnNameLight Bulb;
String name = rsmd.getColumnTypeNameLight Bulb;
result += (((i == 1) ? "\n " : "\n ") + colName + ",");
}

return result.substring(1, result.length() - 1);
}

private String createWheremapSql(ResultSetMetaData rsmd, int numberOfColumns)
throws SQLException {
String result = "";

for (int i = 1; i <= numberOfColumns; i++) {
String colName = rsmd.getColumnNameLight Bulb;
String name = rsmd.getColumnTypeNameLight Bulb;
result += (((i == 1) ? "\n " : "\n and ") + colName
+ "=#" + colName + "#");
}

return result;
}

private String createInsertSql(ResultSetMetaData rsmd, int numberOfColumns,
String tableName) throws SQLException {
String result = "<!-- =============================================\n mapped-statement insert \n============================================= -->";
result += ("\n<insert id=\"insert" + tableName.toLowerCase() + "Dao\" parameterClass=\"java.util.HashMap\">");
result += ("\n insert into " + tableName + "( \n"
+ createColumnsString(rsmd) + ") "

+ "\n <dynamic prepend=\"values(\">");

result += createWhereSql(rsmd, numberOfColumns, ",", 3) + ")";
result += "\n </dynamic>";
result += "\n</insert>\n\n\n";
return result;

}

private String createUpdateSql(ResultSetMetaData rsmd, int numberOfColumns,
String tableName) throws SQLException {
String result = "<!-- =============================================\n mapped-statement update \n============================================= -->";
result += ("\n<update id=\"update" + tableName.toLowerCase() + "Dao\" parameterClass=\"java.util.HashMap\">");
result += ("\n update " + tableName
+ "\n <dynamic prepend=\"set\"> "
+ createWhereSql(rsmd, numberOfColumns, ",", 4)

+ "\n </dynamic> \n <dynamic prepend=\"where\">");

result += createWhereSql(rsmd, numberOfColumns, "and", 1);
result += "\n </dynam

[1] [2]  下一页


[Sql Server]iBATIS SQL Maps(三)  [Sql Server]iBATIS SQL Maps(四)
[Sql Server]iBATIS SQL Maps(一)  [Sql Server]iBATIS SQL Maps(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台