MyBatis Generator 笔记-程序员宅基地

技术标签: 1、JAVA基础  postgresql  sqlserver  ibatis  jdbc  数据库  

 

1、Abator生成Java类文件时,根据注释区分属性和方法是系统生成或用户自定义,以此决定保留或者覆写.
 
2、Abator生成SQLMap的xml文件时,根据元素id是否包含前缀 ibatorgenerated_ 区分元素是系统
      生成或用户自定义,以此决定保留或者覆写.。
 
3、注意ibatorConfig.xm 文件中节点的顺序
 
4、生成的数据对象
 
    Primary Key Class 主键的所有组成字段在一个类中
     
    Record Class 非主键字段非BLOB字段组成的类,继承于Primary Key Class
     
    Record With BLOBs Class 所有BLOB字段组成的类,继承于Record Class (如不存在),就会继承Primary Key Class
                            不支持只包含BLOB字段的表。
     
    Example Class    用于生成动态where条件的类
 
5、example Class 使用(可以使用逻辑运算的结合律简化where条件)


6、在生成的 XxxMapper.xml 文件中,为什么会有两个用于构造 where 条件的 sql 组件

<sql id="Example_Where_Clause">  用于select语句

<sql id="Update_By_Example_Where_Clause"> 用于 update 语句 呢??


原因:因为执行 select 时只传递了一个 XxxExample 对象

<select id="selectByExample" parameterType="com.mt.mybatis.model.TUserExample" resultMap="BaseResultMap">

因此 Example_Where_Clause 直接调用 XxxExample 的 oredCriteria 属性构造 where 条件

 <foreach collection="oredCriteria" item="criteria" separator="or">

因为执行 updateByExample 时传递了 Map 对象

<update id="updateByExample" parameterType="map">

因此 Update_By_Example_Where_Clause 需要先从 Map 中获取 example 对象,再使用 example 的 oredCriteria 属性构造 where 条件

<foreach collection="example.oredCriteria" item="criteria" separator="or">

 
代码:
  TestTableExample example = new TestTableExample();
  example.createCriteria().andField1EqualTo(5);
 
产生条件:
 
  where field1 = 5
 
代码:
 
  TestTableExample example = new TestTableExample();
 
  example.createCriteria()
    .andField1EqualTo(5)
    .andField2IsNull();
 
  example.or(example.createCriteria()
    .andField3NotEqualTo(9)
    .andField4IsNotNull());
 
  List<Integer> field5Values = new ArrayList<Integer>();
  field5Values.add(8);
  field5Values.add(11);
  field5Values.add(14);
  field5Values.add(22);
 
  example.or(example.createCriteria()
    .andField5In(field5Values));
 
  example.or(example.createCriteria()
    .andField6Between(3, 7));
 
 
产生条件:
 
  where (field1 = 5 and field2 is null)
     or (field3 <> 9 and field4 is not null)
     or (field5 in (8, 11, 14, 22))
     or (field6 between 3 and 7)
     
 
6、ibatorConfig.xm 文件分析
 
<?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>
 
    <properties url="file:/home/guo/workspace_google/iBATIS/config/config.properties"/>
     
    <!--
      url     指定属性文件绝对路径。注意与指定数据库jdbc驱动jar包路径的区别哈。
                    可以使用${property}的格式引用属性文件中的属性值。
    -->
     
    <classPathEntry location="/home/guo/java/workspace/newbee/lib/ibatis/postgresql-8.3-604.jdbc3.jar" />
     
    <!--
      classPathEntry 指定数据库jdbc驱动jar包的绝对路径。
    -->
     
    <ibatorContext id="context1" targetRuntime="Ibatis2Java5">
     
    <!--
      id                 这个id可以在使用命令行运行Abator时指定,以单独处理某一个ibatorContext
      targetRuntime        Ibatis2Java5 生成适合JDK5.0的类,另一个选项是 Ibatis2Java2,生成适合Java2的类。
    -->
     
        <ibatorPlugin type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
            <property name="searchString" value="Example$" />
            <property name="replaceString" value="Criteria" />
        </ibatorPlugin>
         
        <!--
          ibatorPlugin 继承自IbatorPluginAdapter,包名必须是 org.apache.ibatis.ibator.plugins,具体实现可以参考官方文档
            必须有替换和被替换字符属性。
        -->
     
        <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://192.168.1.2:5432/newbee" userId="sa" password="esoon" />
         
        <!--
          driverClass        数据库驱动类
          connectionURL        数据库连接地址
          userId            用户
          password            密码
          
                还可以使用以下格式添加数据库的其他连接属性
          <property name="" value=""/>
        -->
        
        <javaTypeResolver >
        
          <property name="forceBigDecimals" value="false" />
          
          <!--
                  默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
                  true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
        -->
          
        </javaTypeResolver>
             
        <javaModelGenerator targetPackage="com.newbee.bean" targetProject="newbee/src" />
         
        <!--
          targetProject        生成的Java Bean放置在哪个项目的哪个目录下
          targetPackage        生成的Java Bean的包名
                 一个有用的属性
          <property name="trimStrings" value="true" />
                  从数据库返回的值被清理前后的空格
          <property name="enableSubPackages" value="false" />
                  是否在包名后加上scheme名称
        -->
             
        <sqlMapGenerator targetPackage="com.newbee.xml" targetProject="newbee/src" />
         
        <!--
          targetProject        生成的 SqlMap.xml 文件放置在哪个项目的哪个目录下
          targetPackage        生成的 SqlMap.xml 文件的包名
          <property name="enableSubPackages" value="false" />
                  是否在包名后加上scheme名称
        -->
             
        <daoGenerator targetPackage="com.newbee.dao" targetProject="newbee/src" type="GENERIC-CI" />
         
        <!--
          targetProject        生成的 dao类文件放置在哪个项目的哪个目录下
          targetPackage        生成的 dao类文件的包名
          <property name="enableSubPackages" value="false" />
                  是否在包名后加上scheme名称
          type        生成dao文件的类型,可选择IBATIS、SPRING、GENERIC-CI、GENERIC-SI。默认使用GENERIC-CI
                      dao类在构造器中获取 SqlMapClient。
                   
        -->
             
        <table tableName="ALLTYPES" domainObjectName="Customer" >
         
        <!--
          tableName 数据库表明,据说可以包含SQL通配符%和_。
          domainObjectName 数据库表对应的数据对象名称,默认使用表名作为对象名称。
        -->
         
          <property name="useActualColumnNames" value="true"/>
          
          <!--
                  对象的属性名是否使用字段名称
          -->
          
          <generatedKey column="ID" sqlStatement="DB2" identity="true" />
          
          <!--
              column    自增长或使用sequence生成的字段名
              sqlStatement 生成字段的sql片段或其简称(参考官方文档)
              identity    true表示后生成,false表示预生成
               
                  例如:
                   
                  postgresql:<generatedKey 
                      column="lid" 
                      sqlStatement="select nextval('tb000000producttype_lid_seq')" 
                      identity="false" />
                       
                  sqlserver:<generatedKey 
                      column="lid" 
                      sqlStatement="SqlServer" 
                      identity="true" />
                       
                  oracle:<generatedKey 
                      column="lid" 
                      sqlStatement="select tb000000producttype_lid_seq.nextval from dual" 
                      identity="false" />


                  MySql:<generatedKey 
                      column="lid" 
                      sqlStatement="SELECT LAST_INSERT_ID()
                      identity="false" />
               
          -->
          
          <columnOverride column="DATE_FIELD" property="startDate" />
          
              <!--
                  column  字段名
                  property 字段对应的属性名。(默认使用字段名的)
                  javaType 对应的Java类型
                  jdbcType 对应的jdbc类型
                   
                      这里的设置覆写javaTypeResolver中的指定
              -->
          
          <ignoreColumn column="FRED" />
          
          <!--
              column    需要忽略的数据库字段
          -->
          
          <columnRenamingRule searchString="^CUST_" replaceString="" />
          
          <!--
                  数据库字段名称到对象属性名称的影射关系。就是一个替换处理。
          -->
          
        </table>
         
    </ibatorContext>
     
</ibatorConfiguration>

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guo_rui22/article/details/3953991

智能推荐

使用 arm-linux-androideabi-addr2line 工具定位 libunity.so 崩溃问题-程序员宅基地

文章浏览阅读710次,点赞13次,收藏7次。它的名称有点不同 - aarch64-linux-android-addr2line。尽管该实用程序的名称不包含单词arm,但它成功地解密了arm64-v8下的堆栈跟踪,并通常感知arm64-v8的字符。是 NDK 自带的调试工具,可以用来分析 so 崩溃时输出的的内存地址。之后就是通过 cmd 进入到这个路径。找到了 64 位所需的实用程序。_arm-linux-androideabi

javaweb-邮件发送_javaweb发送邮件-程序员宅基地

javaweb-邮件发送 摘要: 本文介绍了邮件传输协议(SMTP和POP3)以及电子邮件的发送和接收过程。还讨论了纯文本文件、带图片和附件的邮件发送方法,以及通过servlet方式注册邮箱和使用springboot框架发送邮件的实现。

element-ui table 设置表格滚动条位置_element table 滚动条位置-程序员宅基地

文章浏览阅读4.3k次,点赞6次,收藏11次。在切换不同页面时(被 keep-alive 缓存的组件间切换),页面中的element-ui table的滚动条位置没有停留在原来的位置。目前需要切换不同的页面返回来后,滚动条保持在原来的位置。_element table 滚动条位置

前端开发经验总结_属性值[session.getattribute("strpath")]引用["],在值内使用时必须-程序员宅基地

文章浏览阅读2.6k次。 我设置nowrap和不设置nowrap效果都一样。就是表格随着文字自动伸展,为什么? →回答问题:TD元素noWrap属性的行为与TD元素的width属性有关。 ◆如果未设置TD宽度,则noWrap属性是起作用的。◆如果设置了TD宽度,则noWrap属性是不起作用的。 http://www.blueidea.com/tech/web/2003/943.as_属性值[session.getattribute("strpath")]引用["],在值内使用时必须被转义。

JS如何把Object对象的数据输出到控制台中_前端怎么通过控制台查看字段取值-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏3次。 前端时间在编写程序时遇到这样一个问题,即在前端页面通过一些js框架自带的异步请求返回的数据类型为Object数据类型,笔者根据网上查阅到的资料,找到以下这种简单的方式://把Object类型转为Json数据格式,再通过console命令在控制台中打印出来console.log("xhr的值为:"+JSON.st..._前端怎么通过控制台查看字段取值

8.cc.Button组件使用详解_cc button.start-程序员宅基地

文章浏览阅读556次。1. cc.Button添加按钮的方法 2种方式 (1)直接创建带Button组件的节点; (2) 先创建节点,再添加组件;按钮组件, 按钮是游戏中最常用的组件, 点击然后响应事件;按钮的过渡效果: 过渡: 普通状态, 鼠标滑动到物体上, 按下状态, 禁用状态 (1)没有过渡,只有响应事件; (2)颜色过渡, 过渡效果中使用颜色; (3)精灵..._cc button.start

随便推点

计算机专业游戏本推荐,2018高性价比游戏本推荐_游戏笔记本哪个好-太平洋电脑网...-程序员宅基地

文章浏览阅读245次。【PConline海选导购】晃眼间,秋风又起,让人振奋的开学季又要到来了!虽然说没有学习压力的暑假,在家着实悠哉,但想到回校后可以跟小伙伴们一起各种开黑吃鸡,是不是就感到很兴奋呢?说到“吃鸡”这种吃配置的游戏,就不得不说游戏本了,毕竟普通的笔记本电脑很难给我们带来畅快的游戏体验。而近年来游戏本市场俨然成为了各大厂商的必争之地,而随着开学季的到来,各大厂商更是推出了众多促销活动,下面就让我们一起来看..._计应专业游戏本

codePen按钮样式学习

看到codepen里面有的按钮搞得很炫酷,但其实也不是很难,就学习记录一下。

服务器维护中没法直播游戏,我的世界盒子显示维护中如何进入战堂服务器-程序员宅基地

文章浏览阅读408次。时间:2021-08-11编辑:hxh斗罗大陆魂师对决火雨队怎么搭配?火雨队是近期非常热门的一套阵容,不少玩家想了解该阵容,那么下面就让小编给大家带来斗罗大陆魂师对决火雨队阵容推荐,感兴趣的小伙伴们一起来看看吧。时间:2021-08-11编辑:hxh玩家在巅峰演武副本中不知道怎么打秦明,秦明的盾很厚不知道怎么破?那么下面就让小编给大家带来斗罗大陆魂师对决巅峰演武秦明破盾攻略,感兴趣的小伙伴们一起来...

GNU Radio之Schmidl & Cox OFDM synch.底层C++实现

在 GNU Radio OFDM 系统中,一个非常重要的环节是在接收端准确地同步和检测发送端发出的信号。这就是 Schmidl & Cox 同步算法发挥作用的地方。Schmidl & Cox 算法是一种用于 OFDM 信号的时间同步的技术。本文对其底层 C++ 源码进行学习记录。

项目开发规范

REST,表述性状态转换,他是一种软件架构风格使用URL定位资源,HTTP动词描述操作根据发出请求类型来区分操作此为风格,是约定方式,可以打破描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。

3.8设计模式——State 状态模式(行为型)

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。