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

将数据库脚本转换成ibatis代码自动生成脚本

阅读更多

将数据库脚本转换成ibatis代码自动生成脚本

表结构:

create table tab_hr_emp_education(
  edu_id        varchar2(10) not null,
  emp_id        varchar2(10) not null,
  school        varchar2(50) not null,
  record        varchar2(50) not null,
  study_sys     char(1) not null,
  study_context varchar2(2000),
  startdate     date,
  enddate       date,
  relate_person varchar2(30),
  relate_phone  varchar2(40),
  remark        varchar2(2000)
);

转换后的结果:

<table tableName="tab_hr_emp_education" domainObjectName="HrEmpEducationBean">
 <property name="useActualColumnNames" value="false"/>
 <columnOverride column="edu_id" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="emp_id" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="school" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="record" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="study_sys" jdbcType="CHAR" javaType="String"/>
 <columnOverride column="study_context" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="startdate" jdbcType="Date" javaType="java.util.Date"/>
 <columnOverride column="enddate" jdbcType="Date" javaType="java.util.Date"/>
 <columnOverride column="relate_person" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="relate_phone" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="remark" jdbcType="VARCHAR2" javaType="String"/>
</table>

完整的abatorConfig1.xml文件

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE abatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN"
  "http://ibatis.apache.org/dtd/abator-config_1_0.dtd ">

<!-- Notice(should set true): SqlMapConfig.xml/sqlMapConfig/settings/useStatementNamespaces="true" -->

<abatorConfiguration>
  <abatorContext id="forTest">
 
    <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
        connectionURL="jdbc:oracle:thin:@192.168.10.84:1521:ora10"
        userId="nnbh_spro"
        password="nnbh_spro">
      <classPathEntry location="D:\ibaits\classes12.jar" />
    </jdbcConnection>

    <javaTypeResolver>
     <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>

 <javaModelGenerator targetPackage="com.forlink.cc.entity.bean"
  targetProject="D:\CVS_ROOT\impl\java\ver1.0\apps\cc\src">
     <property name="enableSubPackages" value="false"/>
     <property name="trimStrings" value="true"/>
    </javaModelGenerator>
   
    <sqlMapGenerator targetPackage="sqlmap.autogenerate"
        targetProject="D:\CVS_ROOT\impl\java\ver1.0\apps\conf\cc">
     <property name="enableSubPackages" value="false"/>
    </sqlMapGenerator>

 <daoGenerator type="GENERIC-CI" targetPackage="com.forlink.cc.entity.dao"
        targetProject="D:\CVS_ROOT\impl\java\ver1.0\apps\cc\src">
     <property name="enableSubPackages" value="false"/>
     <property name="methodNameCalculator" value="default"/>
     <property name="exampleMethodVisibility" value="public"/>
     <property name="rootClass" value="com.forlink.cc.DAO"/>
    </daoGenerator>
<table tableName="tab_hr_emp_education" domainObjectName="HrEmpEducationBean">
 <property name="useActualColumnNames" value="false"/>
 <columnOverride column="edu_id" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="emp_id" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="school" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="record" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="study_sys" jdbcType="CHAR" javaType="String"/>
 <columnOverride column="study_context" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="startdate" jdbcType="Date" javaType="java.util.Date"/>
 <columnOverride column="enddate" jdbcType="Date" javaType="java.util.Date"/>
 <columnOverride column="relate_person" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="relate_phone" jdbcType="VARCHAR2" javaType="String"/>
 <columnOverride column="remark" jdbcType="VARCHAR2" javaType="String"/>
</table>

 


  </abatorContext>
</abatorConfiguration>

 

转换数据代码

public static void main(String[] args)
    {
        String xml = "";      
        try
        {
           
           
            File b = new File("D:\\1.sql");
            BufferedReader bis = new BufferedReader(new FileReader(b));
            String t = "";
           
            boolean start = false;
            while ((t = bis.readLine()) != null)
            {
                 if(!start && t.indexOf("create")>-1 && t.indexOf("table")>-1)
                 {                    
                     start = true;
                   
                     String tableName = t.substring(t.indexOf("table")+6,t.indexOf("(")).trim();                    
                     String tableBean = "";
                    
                     char[] tt = tableName.toCharArray();                    
                     boolean tmpFlag = true;
                     for (int i = 4; i < tt.length; i++)
                     {
                         if(tmpFlag)
                         {
                             tableBean += String.valueOf(tt[i]).toUpperCase();
                             tmpFlag = false;
                         }
                         else
                         {
                             if(tt[i] == '_')
                             {
                                 tmpFlag = true;
                                 continue;
                             }
                             else
                                 tableBean += String.valueOf(tt[i]);
                         }
                     }
                    
                     tableBean += "Bean";
                     xml += "<table tableName=\""+tableName+"\" domainObjectName=\""+tableBean+"\">\n\t<property name=\"useActualColumnNames\" value=\"false\"/>\n";
//                     System.out.println(tableName.toUpperCase());
                 }
                 else
                 {
                 if(start)
                 {
                     if(t.indexOf("primary")>-1)
                     {

                         //xml += "\t<generatedKey column=\""+t.substring(t.indexOf("primary key")+11,t.indexOf(")")).trim().replaceAll("\\(", "")+"\" sqlStatement=\"ORACLE\" identity=\"true\" />\n" ;
                         if(t.indexOf(");")>-1)
                         {
                             start = false;
                             xml +="</table>\n";
                         }
                         continue;
                     }
                     if(t.indexOf(");")>-1)
                     {
                         start = false;
                         xml +="</table>\n";
                         continue;
                     }
                    
                     //处理特殊类型
                     t = t.replaceAll("long varchar", "longvarchar");
                    
                     t = t.replaceAll("\t", "*");
                    
                     String tmp = t.replaceAll(" ", "*");
                    
                   
                     String[] bb = tmp.split("\\*");          
                     String field  = "";
                     String dataType = "";
                     for (int i = 0; i < bb.length; i++)
                     {  
                        
                        
                         if(field.equals("") && !bb[i].equals(""))
                         {
                             field = bb[i].trim();
                            // field = field.replaceAll(" ", "");
                             continue;
                         }
                         else if(dataType.equals("") && !bb[i].equals(""))
                         {
                             dataType = bb[i].trim().toUpperCase();
                             break;
                         }
                     }
                     if(dataType.indexOf("(")>-1)
                         dataType = dataType.substring(0,dataType.indexOf('('));
                     if(dataType.indexOf(',')>-1)
                         dataType = dataType.substring(0,dataType.indexOf(','));
                     if(dataType.equals("DATE"))
                         dataType = "Date";
                    
                     xml += "\t<columnOverride column=\""+field.toLowerCase()+"\" jdbcType=\""+ dataType + "\" javaType=\""+toJavaType(dataType)+"\"/>\n";
                 }
                 }
            }
            System.out.println(xml);
           
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    private static String toJavaType(String dataType)
   
    {  
       
        dataType = dataType.toUpperCase();
       
      
       
        if(dataType.equals("NUMBER"))
        {
            return "long";
        }
        else if(dataType.equals("INT"))
        {
            return "int";
        }
        else if(dataType.equals("VARCHAR2"))
        {
            return "String";
        }
        else if(dataType.equals("VARCHAR"))
        {
            return "String";
        }
        else if(dataType.equals("LONGVARCHAR"))
        {
            return "String";
        }
        else if(dataType.equals("TEXT"))
        {
            return "String";
        }
        else if(dataType.equals("BLOB"))
        {
            return "byte[]";
        }
        else if(dataType.equals("DATE"))
        {
            return "java.util.Date";
        }
        else if(dataType.equals("TIMESTAMP"))
        {
            return "java.sql.Timestamp";
        }
        else if(dataType.equals("CHAR"))
        {
            return "String";
        }   else
            return "";
       
       
    }

分享到:
评论

相关推荐

    IBATIS3代码生成器

    4. **xslt**:这部分可能包含了一系列XSLT样式表文件,它们定义了如何将数据库元数据转换成具体的Java和XML代码。开发者可以修改这些样式表以适应特定的代码风格和项目规范。 使用IBATIS3代码生成器时,首先需要...

    Ibatis/mybatis代码生成工具

    为了进一步提高开发效率,开发者们设计了一系列的代码生成工具,如"Ibatis Helper"和"generator"等,它们能够自动生成基于Ibatis或Mybatis的CRUD(Create, Read, Update, Delete)代码,从而减少手动编写SQL和实体类...

    mysql数据库自动生成对应的java实体类和ibatis配置文件

    本话题主要探讨如何自动将MySQL数据库中的表结构转换为Java实体类以及生成相应的iBatis配置文件。 首先,我们需要理解Java实体类(Entity Class)的作用。在Java应用中,实体类通常代表数据库中的表,每个属性对应...

    自动生成SqlMap

    为了提高开发效率并减少错误,可以利用工具或脚本自动从数据库表结构生成对应的Java类属性以及相关的SQL映射文件。这种方法特别适用于使用MyBatis框架(前身是iBatis)的项目。 #### 二、SqlMap概述 **SqlMap**是...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...

    iBatis SQL Maps开发指南.pdf

    - **自动生成的主键**:支持插入后自动生成主键值。 - **存储过程**:支持调用数据库存储过程。 - **Parameter Mapping**: - **parameterClass**:指定传入参数的类。 - **parameterMap**:定义复杂的参数映射...

    java+ibatis的自我学习编码的论坛

    "sequence.sql"可能是一个数据库脚本,通常用于创建序列,序列在关系型数据库中常用于生成唯一的ID,比如在主键字段上。在Oracle数据库中,序列是自增ID的一种常见实现方式,而在MySQL或PostgreSQL等数据库中,可能...

    mybatis,ibatis,hibernate 显示查询SQL

    这三个框架各有特点,但都提供了ORM(对象关系映射)机制,帮助开发者将数据库操作转换为面向对象的代码。 **MyBatis** MyBatis 是一款轻量级的Java持久层框架,它放弃了Hibernate的全自动化,允许开发者拥有更多的...

    ibatis开发手册(pdf)

    iBatis 是一款优秀的持久层框架,其核心组件 SQL Maps (现在通常称为 MyBatis) 能够极大简化数据库操作代码,通过 XML 配置文件将 JavaBean 映射为 SQL 语句,使得开发者能够更加专注于业务逻辑的编写而无需关注复杂...

    ibatis开发指南(中文版)

    - **iBATIS SQL Map** 是一种用于简化数据库访问的工具,它通过简单的XML配置文件将Java Bean与SQL语句进行映射,从而减少了编写数据库访问代码的工作量。 #### 二、SQL Map 概念 - **SQL Map** 的核心概念是将Java...

    iBATIS 帮助文档

    2. **运行时**:当应用程序执行 SQL 语句时,iBATIS 会根据 XML 配置文件中的映射规则将 JavaBean 的属性转换为 SQL 语句中的参数,并将 SQL 语句的执行结果转换回 JavaBean 对象。 #### 二、安装与升级 **安装**...

    基于JSP+WebWork+iBATIS的小系统

    3. **动态SQL**:iBATIS支持在SQL语句中使用条件判断,根据参数动态生成不同版本的SQL,提高了代码灵活性。 4. **事务管理**:iBATIS可以配合Spring进行声明式事务管理,简化事务控制。 在实际开发中,"基于JSP+...

    spring.struts,ibatis集成包

    1. Groovy-all-2.3.6.jar:这是一个Groovy语言的全集,Groovy是一种基于Java平台的动态语言,常用于构建脚本和自动化任务,与Java代码无缝集成。 2. CXF-dist-2.6.11.jar:Apache CXF是一个开源服务框架,用于创建...

    Struts2与Jasperreport报表结合

    通过XML映射文件,iBatis可以动态地执行SQL,将查询结果转换为Java对象,供JasperReport使用。 JasperReport3.1.4是报表设计和生成的核心组件。它支持丰富的报表元素,如文本框、图像、表格等,以及复杂的样式和...

    OA权限管理

    在权限管理中,iBatis可以帮助我们将SQL语句与Java代码解耦,使得数据库操作更加灵活。我们可以根据用户的角色和权限,动态生成和执行SQL,实现数据的增删查改。同时,iBatis的映射文件可以清晰地定义数据库表和Java...

    AppFramework_V1.0

    IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...

Global site tag (gtag.js) - Google Analytics