• mybatis 架构


    官网地址:http://code.google.com/p/mybatis/

    版本:mybatis 3.2.3

    生成工具:mybatis-generator-core-1.3.2-bundle.zip

    mysql jar包 : mysql-connector-java-5.1.6-bin.jar

    ------------

    生成工具的使用:

    MBG有一个配置文件generatorConfig.xml。在里面设置连接数据库配置、javaModel、sqlMap、javaClient,table

    <strong><?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
      PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
      "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <generatorConfiguration>
        <!-- 引入配置文件,可以通过${sqljdbcPath}取值 -->
        <properties url="file:///D:/workspaces/mybatisGen/bin/generatorConfig.properties"/>
        <!-- classPathEntry用于设置数据库的JDBC驱动的jar包地址,location可以等于只包含了数据库驱动的jar或zip路经,也可以是一个包含驱动的目录 -->
        <classPathEntry location="c:/ojdbc14.jar" />
        <!-- targetRuntime:代码生成目标,默认是MyBatis3,可以是Ibatis2Java2或者Ibatis2Java5。生成对象兼容MyBatis版本3.0和更高版本,和JSE 5.0和更高版本 -->
        <!-- defaultModelType:用来定义生成模型类型策略。1.conditional 默认策略,为每个表生成一个Model class;2.flat:将所有的表中生成一个Model class,即这个类将保存所有表中字段;3.hierarchical :如果表有一个主键,该模型将生成一个主键类,另一个类,用于容纳任何BLOB列在表中,和另一个类,用于容纳其余的字段。这个是一个适当的继承类之间的关系 -->
        <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="conditional">
            <commentGenerator>  
                <!-- 是否去除自动生成的注释,默认false,true:去除;false:不去除 -->  
                <property name="suppressAllComments" value="true" />
                <!-- 指定在生成的注释是否将包括时间戳,默认是false -->
                <property name="suppressDate" value="true" />
            </commentGenerator>
            <!-- 数据库连接的信息:驱动类、连接地址、用户名、密码 -->
            <jdbcConnection
                driverClass="oracle.jdbc.driver.OracleDriver"
                connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:ZFGJJ" 
                userId="hr"
                password="hr">
            </jdbcConnection>
            <!-- 解决数字转换问题 -->
            <javaTypeResolver>
                <!-- 只有一个属于forceBigDecimals,默认false。如果字段精确超过0,生成BigDecimal 如果字段精确是0,总长度10-18生成Long; 如果字段精确是0,总长5-9生成Integer; 如果字段精确是0,总长小于5生成Short; 如果forceBigDecimals为true,统一生成BigDecimal -->
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
            <!-- Model生成配置 targetPackage:生成包路径,自动生成目录。targetProject:项目路经,可以绝对路径或者相对路径。 -->
            <javaModelGenerator targetPackage="test.model" targetProject="D:Workspacemylearnmybatis">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="true" />
                <!-- 从数据库返回的值被清理前后的空格  -->
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
            <!-- sqlMap配置 -->
            <sqlMapGenerator targetPackage="test.sqlmap" targetProject="D:Workspacemylearnmybatis">
                <property name="enableSubPackages" value="true" />
            </sqlMapGenerator>
            <!-- DAO接口的生成 -->
            <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="D:Workspacemylearnmybatis">
                <property name="enableSubPackages" value="true" />
            </javaClientGenerator>
            <!-- tableName:用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名,如果未指定自动基于表名生成 -->
            <!-- table其他属性:enableCountByExample="false";enableUpdateByExample="false";enableDeleteByExample="false";enableSelectByExample="false";selectByExampleQueryId="false";schema即为数据库名, tableName为对应的数据库表, domainObjectName是要生成的实体类 -->
            <table schema="hr" tableName="countries" domainObjectName="Customer">
                <!-- 忽略字段 -->
                <ignoreColumn column="columnName" />
    
                <!-- 无论字段是什么类型,生成的类属性都是varchar -->
                <columnOverride column="columnName" jdbcType="VARCHAR" />
                            <!-- 修改数据库列名映射的javabean属性名 -->
                <columnOverride column="oldColumnName" property="propertyName" />
    
                <!-- 主键生成 如果用了这个 generatedKey ,MBG将在sqlmpper.xml里生成一个 selectKey元素在用在<insert>元素里 。 -->
                <generatedKey column="columnName" sqlStatement="JDBC" identity="true" />
                <generatedKey column="ID" sqlStatement="MySql" identity="true" />
    
                <!-- javabean继承的父类 -->
                <property name="rootClass" value="com.xxx.commons.entity.IdEntity"/>
    
                <property name="useActualColumnNames" value="true"/>
            </table>
        </context>
    </generatorConfiguration></strong>

    <javaModelGenerator>元素用于定义Java模型生成的属性
    支持的属性:
    constructorBased:默认值是false

    此属性用于选择是否MyBatis生成器将生成一个类的构造函数,它接受一个值类中的每个字段。同时,SQL结果地图将建成投入使用构造函数而不是“setter”为每个字段。这个属性是只适用于MyBatis3和将被忽略了iBATIS2。这个属性可以被相应的属性在< table >元素。

    immutable:默认为false

    不可变,此属性用于选择是否MyBatis生成器将产生不可变模型类——这意味着类不会有“setter”方法和构造函数会接受类中每个字段的值。

    trimStrings:默认值是false。 
    此属性用于选择是否MyBatis生成器添加代码来修剪的白色空间从字符字段从数据库返回的。这可以是很有用的,如果您的数据库将数据存储在字符字段而不是VARCHAR字段。当真正的,MyBatis生成器将插入代码来削减字符字段。

     

    <javaClientGenerator>元素是用来定义Java客户机代码生成器的属性 Java客户机生成器用来建立Java接口和类,以便可以方便地使用生成的Java模型和XML映射文件。 对于iBATIS2目标环境,这些生成的对象采用的形式DAO接口和实现类。 对于MyBatis,生成的对象采用的形式mapper接口。 type属性: 如果targetRuntime为MyBatis3 XMLMAPPER:生成的对象将Java接口MyBatis 3。xmapper基础设施接口将会依赖生成的XML映射器文件。一般都是使用这个XMLMAPPER

    <table>元素用于选择数据库中的一个表。选择的表将导致生成以下对象为每个表

    tableName:必须配置 ,指定表的名称 domainObjectName:生成javabean对象的基本名称。如果未指定,MBG将自动基于表名生成。这个名字(无论是在这里指定,或自动生成)将被用来作为域类名和DAO类的名字。

    enableInsert:是否生成插入语句。默认是true enableSelectByPrimaryKey:是否通过主键生成选择语句。不管是否有这种设置,如果该表没有一个主键将不会生成。 enableUpdateByPrimaryKey:是否通过主键生成更新语句。如果该表没有主键,不管是否设置该属性,语句将不会生成。 enableDeleteByPrimaryKey:是否通过主键生成删除语句。如果该表没有主键,不管这种设置该属性,语句将不会生成。 enableDeleteByExample:是否通过example对象生成删除语句。这个声明使得许多不同的动态删除在运行时生成。 enableCountByExample:是否通过example对象生成计算行数语句。该语句将返回一个表中的行数相匹配的example。 enableUpdateByExample:是否通过example对象生成更新语句。该语句将更新一个表中相匹配的记录。

    selectByPrimaryKeyQueryId:这个值将被添加到选择列表中选择通过主键的声明在本表格:“' <值>作为QUERYID”。这可以用于识别查询在DBA在运行时跟踪工具。如果你使用这样的价值,你应该指定一个唯一的id为每个不同的查询生成MBG。 selectByExampleQueryId:这个值将被添加到选择列表中选择通过例子的声明在本表格:“' <值>作为QUERYID”。这可以用于识别查询在DBA在运行时跟踪工具。如果你使用这样的价值,你应该指定一个唯一的id为每个不同的查询生成MBG。 enableSelectByExample:是否应该生成通过example的选择语句。这个声明使得许多不同的动态查询是在运行时生成。

     

     

    MBG工具有5种方式运行,1、命令行方式,2、ant方式,3、Maven方式,4、基于xml配置的java方式,5、基于java配置的java方式。

     1、运行cmd->java - jar jar包的文件路径  -configfile  generator.xml的文件路径  -overwrite 命令。

    如下: 

     

    java -jar E:Websoftmybaitsmybatis-generator-core-1.3.2libmybatis-generator-core-1.3.2.jar -configfile E:WebWorkSpaceworkspace_jsdownAttachdemosrccommochasoftdowngenerator.xml -overwrite  

     

    成功时输出:MyBatis Generator finished successfully.

     

    2、 Java生成

      List<String> warnings = new ArrayList<String>();  
      boolean overwrite = true;//是否覆盖原来的文件
      File configFile = new File("generatorConfig.xml");  
      ConfigurationParser cp = new ConfigurationParser(warnings);  
      Configuration config = cp.parseConfiguration(configFile);  
      DefaultShellCallback callback = new DefaultShellCallback(overwrite);  
      MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);  
      myBatisGenerator.generate(null);  

    3、ant

    1.<?xml version="1.0"?>  
    2.  
    3.<project default="genfiles" basedir=".">  
    4.    <path id="build">  
    5.        <fileset dir="${basedir}webWEB-INFlib">  
    6.            <include name="*.jar" />  
    7.        </fileset>  
    8.    </path>  
    9.  
    10.    <property name="generated.source.dir" value="${basedir}" />  
    11.  
    12.    <target name="genfiles" description="Generate the files">  
    13.        <taskdef name="mbgenerator" classname="org.mybatis.generator.ant.GeneratorAntTask">  
    14.            <classpath refid="build" />  
    15.        </taskdef>  
    16.        <!--configfile:填你MBG文件名  -->  
    17.        <mbgenerator overwrite="true" configfile="generatorConfig.xml" verbose="false">  
    18.            <propertyset>  
    19.                <propertyref name="generated.source.dir" />  
    20.            </propertyset>  
    21.        </mbgenerator>  
    22.    </target>  
    23.</project>  

     

    ibatis例子入门:

     http://www.cnblogs.com/ycxyyzw/archive/2012/10/13/2722567.html

  • 相关阅读:
    手机键盘
    关于大数除法
    整数转字符串,字符串转整数
    动态规划习题:数字三角形(01背包)
    关于最长不重复子串的问题
    Ubuntu12.04 下vim的使用(不断更新)
    Ubuntu12.04 如何设置环境变量
    LeetCode--Reverse Linked List II
    Ubuntu12.04 使用svn如何设置代理
    July面试整理系列--(5)
  • 原文地址:https://www.cnblogs.com/Dhouse/p/3374331.html
Copyright © 2020-2023  润新知