环境情况如下:
python-2.5.2
ibatis-2.3.4.726
jdk1.6.0_07
Oracle9i Enterprise Edition 9.2.0.1.0
一个简单的ibatis配置文件生成工具:
测试文件如下(test.sql):
-----------------------------------------------------
-- Export file for user PS --
-- Created by administrator on 2010/1/26, 10:56:19 --
-----------------------------------------------------
spool test.log
prompt
prompt Creating table TAB_BSC
prompt =====================
prompt
create table PS.TAB_BSC
(
TB_ID NUMBER(10, 0),
TB_NAME VARCHAR2(50),
TB_TIME DATE,
TB_VALUE NUMBER(10, 5)
)
tablespace PSTBS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
prompt
prompt Creating table TAB_CELL
prompt ======================
prompt
create table PS.TAB_CELL
(
TC_ID NUMBER(10, 0),
TC_NAME VARCHAR2(50),
TC_TIME DATE,
TC_VALUE NUMBER(10, 5)
)
tablespace PSTBS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
spool off
生成工具的Python代码如下(ibatisGen.py):
# coding:gbk
import os
import re
def ibatisxml(rawsqls):
tabs = re.findall("(create table PS.(\w+).+?;)", rawsqls, re.DOTALL)
for i in tabs:
tabU = i[1]
cols = re.findall(" ([_A-Z0-9]+)\s+([_A-Z0-9]+)", i[0])
txml = ["""<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">"""]
columnStr = ",\n".join([""" %s"""%j[0] for j in cols])
valueStr = ",\n".join([""" #%s#"""%j[0] for j in cols])
txml.append("""<sqlMap namespace="%(tabU)s">
<typeAlias alias="%(tabU)s" type="com.test.beans.%(tabU)s"/>
<select id="selectSource%(tabU)s" parameterClass="%(tabU)s" resultClass="%(tabU)s">
<![CDATA[
select
%(columnStr)s
from %(tabU)s
]]>
</select>
<insert id="insertTarget%(tabU)s" parameterClass="%(tabU)s">
<![CDATA[
insert into %(tabU)s (
%(columnStr)s
) values (
%(valueStr)s
)
]]>
</insert>
<delete id="deleteTarget%(tabU)s" parameterClass="%(tabU)s">
<![CDATA[
delete from %(tabU)s where 1=1
]]>
</delete>
</sqlMap>
"""%locals())
if not os.path.exists("ibatisxml"):
os.makedirs("ibatisxml")
ofile = file("ibatisxml/%s.xml"%i[1], "w")
ofile.write("\n".join(txml))
ofile.close()
def javaclass(rawsqls):
tabs = re.findall("(create table PS.(\w+).+?;)", rawsqls, re.DOTALL)
for vv in tabs:
tabU = vv[1]
tclass = []
cols = re.findall(" ([_A-Z0-9]+)\s+([_A-Z0-9]+)", vv[0])
tclass.append("""package com.test.beans;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
public class %(tabU)s implements Serializable {
private static final long serialVersionUID = 1L;
"""%locals())
for iv, cv in enumerate(cols):
colU = cv[0]
colL = cv[0].capitalize()
colT = "String"
if cv[1]=="TIMESTAMP" or cv[1]=="DATE":
colT = "Timestamp"
elif cv[1]=="INTEGER" or cv[1]=="FLOAT" or cv[1]=="NUMBER":
colT = "BigDecimal"
tclass.append(""" public %(colT)s get%(colU)s() {
return %(colU)s;
}
public void set%(colU)s(%(colT)s %(colL)s) {
%(colU)s = %(colL)s;
}
"""%locals())
for iv, cv in enumerate(cols):
colU = cv[0]
colL = cv[0].capitalize()
colT = "String"
if cv[1]=="TIMESTAMP" or cv[1]=="DATE":
colT = "Timestamp"
elif cv[1]=="INTEGER" or cv[1]=="FLOAT" or cv[1]=="NUMBER":
colT = "BigDecimal"
tclass.append(""" public %(colT)s %(colU)s;"""%locals())
tclass.append("}")
if not os.path.exists("javaclass"):
os.makedirs("javaclass")
ofile = file("javaclass/%s.java"%tabU, "w")
ofile.write("\n".join(tclass))
ofile.close()
ifile = file("test.sql", "r")
rsql = ifile.read()
ifile.close()
ibatisxml(rsql)
javaclass(rsql)
来看看测试结果吧,
ibatisxml文件夹中生成两个文件:
(TAB_BSC.xml):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="TAB_BSC">
<typeAlias alias="TAB_BSC" type="com.test.beans.TAB_BSC"/>
<select id="selectSourceTAB_BSC" parameterClass="TAB_BSC" resultClass="TAB_BSC">
<![CDATA[
select
TB_ID,
TB_NAME,
TB_TIME,
TB_VALUE
from TAB_BSC
]]>
</select>
<insert id="insertTargetTAB_BSC" parameterClass="TAB_BSC">
<![CDATA[
insert into TAB_BSC (
TB_ID,
TB_NAME,
TB_TIME,
TB_VALUE
) values (
#TB_ID#,
#TB_NAME#,
#TB_TIME#,
#TB_VALUE#
)
]]>
</insert>
<delete id="deleteTargetTAB_BSC" parameterClass="TAB_BSC">
<![CDATA[
delete from TAB_BSC where 1=1
]]>
</delete>
</sqlMap>
(TAB_CELL.xml):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="TAB_CELL">
<typeAlias alias="TAB_CELL" type="com.test.beans.TAB_CELL"/>
<select id="selectSourceTAB_CELL" parameterClass="TAB_CELL" resultClass="TAB_CELL">
<![CDATA[
select
TC_ID,
TC_NAME,
TC_TIME,
TC_VALUE
from TAB_CELL
]]>
</select>
<insert id="insertTargetTAB_CELL" parameterClass="TAB_CELL">
<![CDATA[
insert into TAB_CELL (
TC_ID,
TC_NAME,
TC_TIME,
TC_VALUE
) values (
#TC_ID#,
#TC_NAME#,
#TC_TIME#,
#TC_VALUE#
)
]]>
</insert>
<delete id="deleteTargetTAB_CELL" parameterClass="TAB_CELL">
<![CDATA[
delete from TAB_CELL where 1=1
]]>
</delete>
</sqlMap>
javaclass文件夹中也生成了两个文件:
(TAB_BSC.java):
package com.test.beans;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
public class TAB_BSC implements Serializable {
private static final long serialVersionUID = 1L;
public BigDecimal getTB_ID() {
return TB_ID;
}
public void setTB_ID(BigDecimal Tb_id) {
TB_ID = Tb_id;
}
public String getTB_NAME() {
return TB_NAME;
}
public void setTB_NAME(String Tb_name) {
TB_NAME = Tb_name;
}
public Timestamp getTB_TIME() {
return TB_TIME;
}
public void setTB_TIME(Timestamp Tb_time) {
TB_TIME = Tb_time;
}
public BigDecimal getTB_VALUE() {
return TB_VALUE;
}
public void setTB_VALUE(BigDecimal Tb_value) {
TB_VALUE = Tb_value;
}
public BigDecimal TB_ID;
public String TB_NAME;
public Timestamp TB_TIME;
public BigDecimal TB_VALUE;
}
(TAB_CELL.java):
package com.test.beans;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
public class TAB_CELL implements Serializable {
private static final long serialVersionUID = 1L;
public BigDecimal getTC_ID() {
return TC_ID;
}
public void setTC_ID(BigDecimal Tc_id) {
TC_ID = Tc_id;
}
public String getTC_NAME() {
return TC_NAME;
}
public void setTC_NAME(String Tc_name) {
TC_NAME = Tc_name;
}
public Timestamp getTC_TIME() {
return TC_TIME;
}
public void setTC_TIME(Timestamp Tc_time) {
TC_TIME = Tc_time;
}
public BigDecimal getTC_VALUE() {
return TC_VALUE;
}
public void setTC_VALUE(BigDecimal Tc_value) {
TC_VALUE = Tc_value;
}
public BigDecimal TC_ID;
public String TC_NAME;
public Timestamp TC_TIME;
public BigDecimal TC_VALUE;
}
JavaBean的生成稍微偷了下懒,
使用 Timestamp 接所有的时间,
使用 BigDecimal 接所有的数字,
幸好 java支持这样做,jdbc支持得也不错。
以后用ibatis时可以先导一份表结构,
根据表结构可以生成配置文件,生成JavaBean,
方便了。
分享到:
相关推荐
j2me学习笔记【1】——helloworld程序示例 j2me学习笔记【2】——利用Display类的isColor()方法获取设备是否支持彩色的信息 j2me学习笔记【3】——简单的在线帮助示例 j2me学习笔记【4】——Item类的学习 j2me学习...
本压缩包包含的“C语言学习笔记”是一份详尽的C语言学习资料,旨在帮助读者深入理解和掌握C语言的基本概念、语法结构以及实际应用技巧。 一、C语言基础 C语言的基础包括变量、数据类型、运算符、流程控制等。变量...
这份"Linux学习笔记(强悍总结值得一看)"是Linux初学者的宝贵资源,也适合有经验的用户作为参考手册。以下是对笔记内容的详细概述: 1. **Linux常用命令**: Linux命令行是其强大的工具,掌握常用命令是Linux学习...
学习笔记通常包括了基础概念、关键特性、实用技巧以及常见问题的解决方法。 【标签】"h5"、"前端"、"学习笔记"进一步明确了内容的重点。"h5"即HTML5,是前端开发的核心;"前端"意味着这些笔记涉及的是用户可见和...
1. **Java基础**:介绍Java语言的基本语法,如变量、数据类型、运算符、控制流程(条件语句、循环)、数组、字符串以及异常处理。这些基础知识是理解和编写任何Java程序的基石。 2. **面向对象编程**:深入讲解Java...
Perl是一种强大的脚本编程语言,尤其适合文本处理和系统管理任务。在个人的学习过程中,掌握其基本语法和特性是至关重要的。以下是对标题和描述中提及的一些关键知识点的详细解释: 1. **操作符**: Perl中的`x`操作...
### Python学习笔记知识点详解 #### 一、Python简介与特性 **标题与描述解析:** "Python学习笔记.pdf" 的标题直接指出了文档的主题——Python的学习资料,而描述的重复表明该文档的主要内容即为Python的学习笔记...
这篇笔记将探讨如何使用HSQL处理文本数据库,结合标签"源码"和"工具",我们将深入理解HSQL的功能和应用。 首先,让我们了解HSQL的基本概念。HSQLDB是一个完全Java编写的数据库,这意味着它可以在任何支持Java的平台...
《Python学习笔记(干货) 中文PDF完整版.pdf》是一份全面且深入的Python学习资源,旨在帮助初学者和有经验的程序员进一步提升Python技能。这份资料覆盖了Python的多个核心概念,包括环境搭建、基本语法、数据类型、...
《JSP & Servlet学习笔记(第2版)》涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 《JSP & Servlet学习笔记(第2版)》以“微博”项目贯穿全书,将JSP & Servlet技术应用...
本学习笔记涵盖了 web 前端开发的基础知识,包括 HTML 的基本结构、文档类型声明、常见的文本和列表标签、分区标签以及图片标签的使用方法。对于初学者而言,这些内容是构建网页的基础,而掌握这些基础知识是进一步...
这份《java学习》笔记包含了多个核心主题,旨在帮助初学者和有经验的开发者深入理解和掌握Java技术。 1. **正则表达式(正则.md)**: 正则表达式在Java中用于文本匹配和搜索,是处理字符串的强大工具。Java提供了...
【Java学习笔记模版】 Java实习工程师在学习过程中,会涉及到许多关键知识点,尤其是在企业级开发的场景下。从给出的四天学习笔记来看,实习生正在逐步掌握Java Web开发的基础和核心技能。以下是对这些知识点的详细...
本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP & Servlet技术应用于...
文档的更新历史表明,该学习笔记不断地被更新和完善,以确保其内容的准确性和时效性。作者黄海广对笔记进行了多次修改和补充,以修正错误并增加新的内容,比如OCTAVE操作内容、数学基础和公式推导等。这体现了作者对...
【Python学习笔记-王纯业】是一份专为Python初学者设计的教程,由王纯业编撰。这个教程深入浅出地介绍了Python编程的基础知识,帮助初学者快速上手。下面将详细阐述该教程中可能包含的重要知识点,以及Python入门者...
以下是对Oracle学习笔记中提到的一些关键知识点的详细解释: 1. **SQL执行顺序**: SQL语句的执行顺序是:`FROM` -> `WHERE` -> `SELECT` -> `GROUP BY` -> `HAVING` -> `ORDER BY`。首先从`FROM`子句开始,确定...