文本处理学习笔记1
环境情况如下: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.logpromptprompt Creating table TAB_BSCprompt =====================promptcreate table PS.TAB_BSC( TB_ID NUMBER(10, 0), TB_NAME VARCHAR2(50), TB_TIME DATE, TB_VALUE NUMBER(10, 5))tablespace PSTBSpctfree 10initrans 1maxtrans 255storage( initial 64K minextents 1 maxextents unlimited);promptprompt Creating table TAB_CELLprompt ======================promptcreate table PS.TAB_CELL( TC_ID NUMBER(10, 0), TC_NAME VARCHAR2(50), TC_TIME DATE, TC_VALUE NUMBER(10, 5))tablespace PSTBSpctfree 10initrans 1maxtrans 255storage( initial 64K minextents 1 maxextents unlimited);spool off
生成工具的Python代码如下(ibatisGen.py):
# coding:gbkimport osimport redef ibatisxml(rawsqls): tabs = re.findall("(create table PS.(\w+).+?;)", rawsqls, re.DOTALL) for i in tabs: tabU = i cols = re.findall("(+)\s+(+)", i) 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 for j in cols]) valueStr = ",\n".join(["""#%s#"""%j 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"> <!]></select><insert id="insertTarget%(tabU)s" parameterClass="%(tabU)s"> <!]></insert><delete id="deleteTarget%(tabU)s" parameterClass="%(tabU)s"> <!]></delete></sqlMap>"""%locals()) if not os.path.exists("ibatisxml"): os.makedirs("ibatisxml") ofile = file("ibatisxml/%s.xml"%i, "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 tclass = [] cols = re.findall("(+)\s+(+)", vv) 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 colL = cv.capitalize() colT = "String" if cv=="TIMESTAMP" or cv=="DATE": colT = "Timestamp" elif cv=="INTEGER" or cv=="FLOAT" or cv=="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 colL = cv.capitalize() colT = "String" if cv=="TIMESTAMP" or cv=="DATE": colT = "Timestamp" elif cv=="INTEGER" or cv=="FLOAT" or cv=="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"> <!]></select><insert id="insertTargetTAB_BSC" parameterClass="TAB_BSC"> <!]></insert><delete id="deleteTargetTAB_BSC" parameterClass="TAB_BSC"> <!]></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"> <!]></select><insert id="insertTargetTAB_CELL" parameterClass="TAB_CELL"> <!]></insert><delete id="deleteTargetTAB_CELL" parameterClass="TAB_CELL"> <!]></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,
方便了。
页:
[1]