`
oaklet
  • 浏览: 109391 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

文本处理学习笔记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.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学习笔记 入门 学习经验

    j2me学习笔记【1】——helloworld程序示例 j2me学习笔记【2】——利用Display类的isColor()方法获取设备是否支持彩色的信息 j2me学习笔记【3】——简单的在线帮助示例 j2me学习笔记【4】——Item类的学习 j2me学习...

    C语言学习笔记 C语言学习笔记

    本压缩包包含的“C语言学习笔记”是一份详尽的C语言学习资料,旨在帮助读者深入理解和掌握C语言的基本概念、语法结构以及实际应用技巧。 一、C语言基础 C语言的基础包括变量、数据类型、运算符、流程控制等。变量...

    Linux学习笔记(强悍总结值得一看)_linux_linux学习笔记_

    这份"Linux学习笔记(强悍总结值得一看)"是Linux初学者的宝贵资源,也适合有经验的用户作为参考手册。以下是对笔记内容的详细概述: 1. **Linux常用命令**: Linux命令行是其强大的工具,掌握常用命令是Linux学习...

    h5前端学习笔记

    学习笔记通常包括了基础概念、关键特性、实用技巧以及常见问题的解决方法。 【标签】"h5"、"前端"、"学习笔记"进一步明确了内容的重点。"h5"即HTML5,是前端开发的核心;"前端"意味着这些笔记涉及的是用户可见和...

    java学习笔记markdown

    1. **Java基础**:介绍Java语言的基本语法,如变量、数据类型、运算符、控制流程(条件语句、循环)、数组、字符串以及异常处理。这些基础知识是理解和编写任何Java程序的基石。 2. **面向对象编程**:深入讲解Java...

    perl个人学习笔记

    Perl是一种强大的脚本编程语言,尤其适合文本处理和系统管理任务。在个人的学习过程中,掌握其基本语法和特性是至关重要的。以下是对标题和描述中提及的一些关键知识点的详细解释: 1. **操作符**: Perl中的`x`操作...

    Python学习笔记.pdf

    ### Python学习笔记知识点详解 #### 一、Python简介与特性 **标题与描述解析:** "Python学习笔记.pdf" 的标题直接指出了文档的主题——Python的学习资料,而描述的重复表明该文档的主要内容即为Python的学习笔记...

    有关hsql处理文本数据库的笔记

    这篇笔记将探讨如何使用HSQL处理文本数据库,结合标签"源码"和"工具",我们将深入理解HSQL的功能和应用。 首先,让我们了解HSQL的基本概念。HSQLDB是一个完全Java编写的数据库,这意味着它可以在任何支持Java的平台...

    Python学习笔记(干货) 中文PDF完整版.pdf

    《Python学习笔记(干货) 中文PDF完整版.pdf》是一份全面且深入的Python学习资源,旨在帮助初学者和有经验的程序员进一步提升Python技能。这份资料覆盖了Python的多个核心概念,包括环境搭建、基本语法、数据类型、...

    JSP_Servlet学习笔记(第2版).pdf

    《JSP & Servlet学习笔记(第2版)》涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 《JSP & Servlet学习笔记(第2版)》以“微博”项目贯穿全书,将JSP & Servlet技术应用...

    超详细的web前端基础学习笔记

    本学习笔记涵盖了 web 前端开发的基础知识,包括 HTML 的基本结构、文档类型声明、常见的文本和列表标签、分区标签以及图片标签的使用方法。对于初学者而言,这些内容是构建网页的基础,而掌握这些基础知识是进一步...

    《java学习》-java学习笔记.zip

    这份《java学习》笔记包含了多个核心主题,旨在帮助初学者和有经验的开发者深入理解和掌握Java技术。 1. **正则表达式(正则.md)**: 正则表达式在Java中用于文本匹配和搜索,是处理字符串的强大工具。Java提供了...

    java学习笔记模版

    【Java学习笔记模版】 Java实习工程师在学习过程中,会涉及到许多关键知识点,尤其是在企业级开发的场景下。从给出的四天学习笔记来看,实习生正在逐步掌握Java Web开发的基础和核心技能。以下是对这些知识点的详细...

    JSP&Servlet学习笔记.pdf

    本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。  本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP & Servlet技术应用于...

    机器学习笔记完整版.pdf

    文档的更新历史表明,该学习笔记不断地被更新和完善,以确保其内容的准确性和时效性。作者黄海广对笔记进行了多次修改和补充,以修正错误并增加新的内容,比如OCTAVE操作内容、数学基础和公式推导等。这体现了作者对...

    Python学习笔记-王纯业

    【Python学习笔记-王纯业】是一份专为Python初学者设计的教程,由王纯业编撰。这个教程深入浅出地介绍了Python编程的基础知识,帮助初学者快速上手。下面将详细阐述该教程中可能包含的重要知识点,以及Python入门者...

    Oracle学习笔记.pdf

    以下是对Oracle学习笔记中提到的一些关键知识点的详细解释: 1. **SQL执行顺序**: SQL语句的执行顺序是:`FROM` -&gt; `WHERE` -&gt; `SELECT` -&gt; `GROUP BY` -&gt; `HAVING` -&gt; `ORDER BY`。首先从`FROM`子句开始,确定...

Global site tag (gtag.js) - Google Analytics