ibator自动代码生成

首先,强烈推荐一篇文章,介绍的特详细

http://www.iteye.com/topic/821983

1. 插件安装

http://blog.csdn.net/rchm8519/article/details/40792821

2. 创建项目,导入ibator-2.0.jar

略。。。。

3. 创建ibator描述文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ibatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN" "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd" >
<ibatorConfiguration >
    <!-- 指定数据库驱动jar包路径;注意:该属性不在默认配置文件中,需要手动添加,建议使用绝对路径-->
    <classPathEntry location="D:\javaTools\ojdbc14.jar" />

    <!--
        id:使用命令行运行Abator时指定,以单独处理某一个ibatorContext
        targetRuntime:Ibatis2Java5 生成适合JDK5.0的类,另一个选项是 Ibatis2Java2,生成适合Java2的类。
    -->
    <ibatorContext  id="FlatJava5" targetRuntime="Ibatis2Java5">
        <property name="suppressTypeWarnings" value="true" />

        <!-- ibatorPlugin ibator插件 begin -->
        <!-- 所有的ibatorPlugin 继承自IbatorPluginAdapter,包名必须是org.apache.ibatis.ibator.plugins.XXX,具体实现可以参考官方文档 -->
        <!-- Serializable序列化 -->
        <ibatorPlugin type="org.apache.ibatis.ibator.plugins.SerializablePlugin" />
        <!-- 这个插件添加方法为例(实际上的内部类)来支持不区分大小写像查询 -->
        <!--<ibatorPlugin type="org.apache.ibatis.ibator.plugins.CaseInsensitiveLikePlugin" />-->
        <!-- 分页插件 -->
        <ibatorPlugin type="org.apache.ibatis.ibator.plugins.PaginationPlugin">
            <property name="enablePagination" value="true" />
             <!-- mysql or oracle -->
            <property name="databaseType" value="oracle" />
        </ibatorPlugin>
        <!-- 重命名example类 -->
        <ibatorPlugin type="org.apache.ibatis.ibator.plugins.PackageRefactorPlugin">
            <property name="searchString" value="Example$" />
            <property name="replaceString" value="Criteria" />
        </ibatorPlugin>
        <!--产生sqlmap.xml -->
        <!--
        <ibatorPlugin type="org.apache.ibatis.ibator.plugins.SqlMapConfigPlugin">
            <property name="targetPackage" value="com.li.test.common.database.entity" />
            <property name="targetProject" value="src" />
        </ibatorPlugin>
         -->
        <!-- ibatorPlugin ibator插件 end -->

        <!-- JDBC链接配置 :当前使用的是oracle数据库;数据库连接属性也可以使用这种格式 <property name="userId" value="test"/>-->
        <!-- driverClass="com.mysql.jdbc.Driver" -->
        <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
            connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
            userId="test" password="test">
            <!-- 是否开启数据库返回注释 :MySQL默认是true,oracle默认是false-->
            <property name="remarksReporting" value="true" />
        </jdbcConnection>
        <!--默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
             true,把JDBC DECIMAL 和NUMERIC 类型解析为java.math.BigDecimal
         -->
        <!--
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
         -->
        <!-- javaBean生成器 -->
        <!--  targetPackage:目标包路径
              targetProject:目标项目路径,默认="src",如果使用maven环境请指定为绝对路径,比如:targetProject="C:\workspace3\ibatisDemo\src\main\java"
        -->
        <javaModelGenerator targetPackage="com.li.test.common.database.entity" targetProject="src">
             <!-- 如果为TRUE,下面的设置了schema,那么包名就是会增加个schema名
                    例如:schema="userName1",生成类:com.li.test.common.database.entity.userName1.XXXX; -->
             <property name="enableSubPackages" value="true" />
             <!-- 继承哪个父类,这个为了有时候日志需要打印整个对象,而采用的apache打印对象的每个属性 -->
             <!--<property name="rootClass" value="org.apache.ibatis.ibator.ant.BaseBean" /> -->
             <property name="rootClass" value="ibator.BaseBean" />
        </javaModelGenerator>
        <!-- SQL映射文件生成器 -->
        <sqlMapGenerator targetPackage="com.li.test.common.database.sqlmap" targetProject="src">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- dao生成器 -->
        <!-- type:生成dao类的模板,可选择IBATIS、SPRING、GENERIC-CI、GENERIC-SI -->
        <!-- implementationPackage:dao实现类的包名 -->
        <daoGenerator type="SPRING" implementationPackage="com.li.test.common.database.dao.impl"
            targetPackage="com.li.test.common.database.dao" targetProject="src" >
            <property name="enableSubPackages" value="true" />
        </daoGenerator>
        <!-- 表属性映射生成器 -->
        <!-- schema:即用户名 -->
        <!-- tableName:数据库表名  -->
        <!-- domainObjectName:生成的类名,不写则默认和表名相同 -->
        <!-- 如果数据库里面有多个相同表名在不同的schema下,那么你得加上:
             schema="XXXX"和<property name="ignoreQualifiersAtRuntime" value="true" />
             不然ibator会以找到的最后一个为最终对象
         -->
        <table schema="test" tableName="t_questionwh" domainObjectName="QuestionwhEO">
            <!-- 忽略schema,避免在xml中出现schema.表名  -->
             <property name="ignoreQualifiersAtRuntime" value="true" />
            <!-- columnOverride 指定属性名称,不指定则以默认规则处理:字母先全变小写,然后去掉下划线,下划线后首字母大写 -->
              <!--
                  <columnOverride column="finish_flag" javaType="Boolean"/>
                  <columnOverride column="receive_fee" javaType="Long" />
                <columnOverride column="operate_flag" javaType="Integer" />
                <columnOverride column="out_daily_total" javaType="BigDecimal" />
              -->
              <generatedKey column="ID" sqlStatement="select seq_questionwh from dual" identity="false"/>
              <columnOverride column="id" javaType="Long" />
              <!-- 精确到时分秒时,需要设置下:  jdbcType="TIMESTAMP"-->
              <columnOverride column="createtime" jdbcType="TIMESTAMP"/>
        </table>
        <table schema="test" tableName="t_questiondetil" domainObjectName="QuestionDetailEO">
             <property name="ignoreQualifiersAtRuntime" value="true" />
        </table>
    </ibatorContext>
</ibatorConfiguration>

4. 添加ibator插件java类

ibatorConfig.xml中使用了自定义插件org.apache.ibatis.ibator.plugins.PackageRefactorPlugin

源码如下:

package org.apache.ibatis.ibator.plugins;

import java.util.List;

import org.apache.ibatis.ibator.api.FullyQualifiedTable;
import org.apache.ibatis.ibator.api.IbatorPluginAdapter;
import org.apache.ibatis.ibator.api.IntrospectedTable;
import org.apache.ibatis.ibator.api.dom.xml.XmlElement;
import org.apache.ibatis.ibator.config.TableConfiguration;

public class PackageRefactorPlugin extends IbatorPluginAdapter{

    @Override
    public boolean validate(List<String> warnings) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public void initialized(IntrospectedTable introspectedTable) { 

       TableConfiguration tableConfig =  introspectedTable.getTableConfiguration();
       String pack = getPackage(tableConfig);
       calculateDAOAttributes(pack,introspectedTable);
       calculateModelAttributes(pack,introspectedTable);
       calculateXmlAttributes(pack,introspectedTable);
    }

    protected void calculateXmlAttributes(String pakkage,IntrospectedTable introspectedTable){
        introspectedTable.setIbatis2SqlMapPackage(pakkage);
        String sqlmap = introspectedTable.getFullyQualifiedTable().getDomainObjectName().replaceAll("EO", "")+".xml";
        introspectedTable.setIbatis2SqlMapFileName(sqlmap);
    }

    protected void calculateDAOAttributes(String pakkage,IntrospectedTable introspectedTable) {
        FullyQualifiedTable fullyQualifiedTable = introspectedTable.getFullyQualifiedTable();
        StringBuilder sb = new StringBuilder();
        sb.append(pakkage);
        sb.append(‘.‘);
        sb.append(fullyQualifiedTable.getDomainObjectName().replaceAll("EO", ""));
        sb.append("DAOImpl"); //$NON-NLS-1$
        introspectedTable.setDAOImplementationType(sb.toString());
        sb.setLength(0);
        sb.append(pakkage);
        sb.append(‘.‘);
        sb.append(fullyQualifiedTable.getDomainObjectName().replaceAll("EO", ""));
        sb.append("DAO"); //$NON-NLS-1$
        introspectedTable.setDAOInterfaceType(sb.toString());
    }

    protected void calculateModelAttributes(String pakkage,IntrospectedTable introspectedTable) {
        FullyQualifiedTable fullyQualifiedTable = introspectedTable.getFullyQualifiedTable();
        StringBuilder sb = new StringBuilder();
        sb.append(pakkage);
        sb.append(‘.‘);
        sb.append(fullyQualifiedTable.getDomainObjectName());
        sb.append("Key"); //$NON-NLS-1$
        introspectedTable.setPrimaryKeyType(sb.toString());

        sb.setLength(0);
        sb.append(pakkage);
        sb.append(‘.‘);
        sb.append(fullyQualifiedTable.getDomainObjectName());
        introspectedTable.setBaseRecordType(sb.toString());

        sb.setLength(0);
        sb.append(pakkage);
        sb.append(‘.‘);
        sb.append(fullyQualifiedTable.getDomainObjectName().replaceAll("EO", ""));
        sb.append("WithBLOBs"); //$NON-NLS-1$
        introspectedTable.setRecordWithBLOBsType(sb.toString());

        sb.setLength(0);
        sb.append(pakkage);
        sb.append(‘.‘);
        sb.append(fullyQualifiedTable.getDomainObjectName().replaceAll("EO", ""));
        sb.append("Example"); //$NON-NLS-1$
        introspectedTable.setExampleType(sb.toString());
    }

    public String getPackage(TableConfiguration tableConfig){
        String basePack = "com.sdo.mas.common.database";
        String pack = tableConfig.getProperty("package");
        if( null  != pack && "".equals(pack) == false){
            return pack;
        }else{
            pack = tableConfig.getTableName().toLowerCase().replaceAll("_", "");
        }
        pack =  basePack +"."+pack;
        return pack;
    }

    @Override
    public boolean sqlMapInsertElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
        return true;

    }

    @Override
    public boolean sqlMapUpdateByExampleSelectiveElementGenerated(XmlElement element,
            IntrospectedTable introspectedTable) {
        return true;
    }

    @Override
    public boolean sqlMapUpdateByExampleWithBLOBsElementGenerated(XmlElement element,
            IntrospectedTable introspectedTable) {
      //  AbstractXmlElementGenerator generator = new UpdateByExampleWithBLOBsElementGenerator();
      //  generator.setIntrospectedTable(introspectedTable);
      //  generator.setIbatorContext(ibatorContext);
    //    generator.addElements(element);
        return true;
    }

    @Override
    public boolean sqlMapUpdateByExampleWithoutBLOBsElementGenerated(XmlElement element,
            IntrospectedTable introspectedTable) {
     //   AbstractXmlElementGenerator generator = new UpdateByExampleWithoutBLOBsElementGenerator();
     //   generator.setIntrospectedTable(introspectedTable);
    //    generator.setIbatorContext(ibatorContext);
      //  generator.addElements(element);
        return true;
    }

    @Override
    public boolean sqlMapUpdateByPrimaryKeySelectiveElementGenerated(XmlElement element,
            IntrospectedTable introspectedTable) {
     //   AbstractXmlElementGenerator generator = new UpdateByPrimaryKeySelectiveElementGenerator();
     //   generator.setIntrospectedTable(introspectedTable);
    //    generator.setIbatorContext(ibatorContext);
    //    generator.addElements(element);
        return true;
    }

    @Override
    public boolean sqlMapUpdateByPrimaryKeyWithBLOBsElementGenerated(XmlElement element,
            IntrospectedTable introspectedTable) {
    //    AbstractXmlElementGenerator generator = new UpdateByPrimaryKeyWithBLOBsElementGenerator();
   //     generator.setIntrospectedTable(introspectedTable);
   //     generator.setIbatorContext(ibatorContext);
   //     generator.addElements(element);
        return true;
    }

    @Override
    public boolean sqlMapUpdateByPrimaryKeyWithoutBLOBsElementGenerated(XmlElement element,
            IntrospectedTable introspectedTable) {
    //    AbstractXmlElementGenerator generator = new UpdateByPrimaryKeyWithoutBLOBsElementGenerator();
      //  generator.setIntrospectedTable(introspectedTable);
     //   generator.setIbatorContext(ibatorContext);
    //    generator.addElements(element);
        return true;
    }

    @Override
    public boolean sqlMapInsertSelectiveElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
    //    AbstractXmlElementGenerator generator = new InsertSelectiveElementGenerator();
   //     generator.setIntrospectedTable(introspectedTable);
   //     generator.setIbatorContext(ibatorContext);
   //     generator.addElements(element);
        return true;
    }

}

5. 生成代码

  java类如下,直接执行它就行

package com.li.test.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.ibator.api.Ibator;
import org.apache.ibatis.ibator.config.IbatorConfiguration;
import org.apache.ibatis.ibator.config.xml.IbatorConfigurationParser;
import org.apache.ibatis.ibator.internal.DefaultShellCallback;

public class IbatorRunTest {

    public static void main(String[] args) {
        try {
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            String file = IbatorRunTest.class.getClassLoader().getResource("ibatorConfig.xml").getFile();
            File configFile = new File(file);
            IbatorConfigurationParser cp = new IbatorConfigurationParser(warnings);
            IbatorConfiguration config = cp.parseIbatorConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            Ibator ibator = new Ibator(config, callback, warnings);
            ibator.generate(null);
            for (String warning : warnings) {
                System.out.println("warning:" + warning);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

}

6. 使用说明

http://www.cnblogs.com/angus332770349/archive/2012/06/04/2534970.html

时间: 2024-10-13 08:53:10

ibator自动代码生成的相关文章

bboss自动代码生成工具使用指南

本文介绍bboss自动代码生成工具使用方法 工具在线浏览效果: http://gencode.bbossgroups.com 在介绍之前首先了解一下bboss自动代码生成工具能帮助我们做哪些事情. 通过自动代码生成框架,根据模板可以自动生成数据库表的增.删.改.分页查询.列表查询.国际化功能对应的java.jsp程序和配置文件,包括: 1.mvc控制器 2.业务组件 3.PO实体类 4.jsp文件 可以定制不同风格的界面模板,目前提供了一套bboss平台的基础ui风格和一套bboss普通ui风格

MyBatis学习总结_15_定制Mybatis自动代码生成的maven插件

==========================================================================================================================================================================================================================================================

Simulink自动代码生成简介

以前上学的时候,总感觉自动代码生成的不是很靠谱,也曾经粗浅的用过,当时看到自动生成的代码变量命名比较混乱,之后就基本上没兴趣了.工作以后,又用了下自动代码生成,才发现这是一等一的好工具. 自动代码生成的优势在于: 1) 图形化的策略建模非常有利于交流: 2) 策略工程师不需要有很丰富的编程经验: 3) 自动代码生成的代码质量是比较高的,至少在安全性方面是比人工编码高: 4) 一般情况下,模型为定点模型,计算效率更佳,所以在定点方面比较有优势: 5) 模型测试起来要比代码测试方便. Simulin

人工智能自动代码生成3---数据库获取代码实现1

我们先从最简单的自动代码生成场景开始,先用不怎么智能的方法来实现这些基本功能.我们在这一节中,将使用Java中的JDBC技术,实现对数据库内容的增删改查操作,同时使用PHP中的Mysqli技术,实现同样的功能,通过这个具体的实例,让大家感觉一下,实际中的代码生成,究竟可以实现什么功能. 我们在具体讲数据库获取代码生成之前,我们先来熟悉一下Jinja2的语法知识.我们以Jinja2应用的典型场景为例,来看一下,Jinja2怎样动态通过模板文件,生成标准的HTML文件,从而实现Web应用中的模板技术

(八)SpringBoot使用mybatis-plus+自动代码生成

一.SpringBoot使用mybatis-plus+自动代码生成 使用mybatis-plus可以自动帮我们生成通用的 controller,service,dao,mapper 二.加入依赖 <!-- mybatisplus与springboot整合 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatisplus-spring-boot-starter</

springboot2.0入门(九)-- springboot使用mybatis-generator自动代码生成

一.配置文件引入 插件引入,引入 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>${basedir}/src/mai

mybais-plus整合springboot,自动代码生成。

第一步:导包:mybatis-plus-generator包和freemarker包 <dependencies> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.0</version> </dependency> <depende

搞定多线程自动代码生成控件的问题,解决了参数不匹配异常

直接帖核心代码 private void button1_Click(object sender, EventArgs e)        {            this.tableLayoutPanel1.Controls.Clear();            this.tableLayoutPanel1.RowCount = 10;            this.tableLayoutPanel1.ColumnCount = 10;            Button btn;   

用simulink matlab 自动代码生成无刷电机的c代码

主控mcu :stm32f405Rg 编译器:keil5 MCU代码生成器: stm32cubemx ,f4 1.21.0 无刷电机 bldc 有霍尔 三步启动法. 用stateflow 图形化编程,非常方便就能实现自己的控制算法. pcb 是自己画 的驱动板子, stm32 主控,下一步工作是 优化控制算法,不知道有没有 对 bldc控制算法熟悉 simulinker,感兴趣的可以一起学习,板子还有剩余,不是商业用途,不卖板子哈. O(∩_∩)O哈哈~ 原文地址:https://www.cnb