小工具      在线工具  汉语词典  css  js  c++  java

mybatis SQL 语句构建器与mybatis generator (代码生成器)简单基本使用

# MyBatis 额外说明

收录于:152天前

SQL 语句构建器

MyBatis 在 XML 映射中具备强大的 SQL 动态生成能力及动态sql,但有时,我们还是需要在 Java 代码里构建 SQL 语句就需要SQL 语句构建器

SQL语句构建器解决了Java代码中拼接SQL的复杂性。例如:

String sql = "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, "
"P.LAST_NAME,P.CREATED_ON, P.UPDATED_ON " +
"FROM PERSON P, ACCOUNT A " +
"INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID " +
"INNER JOIN COMPANY C on D.COMPANY_ID = C.ID " +
"WHERE (P.ID = A.ID AND P.FIRST_NAME like ?) " +
"OR (P.LAST_NAME like ?) " +
"GROUP BY P.ID " +
"HAVING (P.LAST_NAME like ?) " +
"OR (P.FIRST_NAME like ?) " +
"ORDER BY P.ID, P.FULL_NAME";

MyBatis 3提供了方便的工具类来帮助解决这个问题。使用 SQL 类,我们只需创建一个实例并调用其方法即可生成 SQL 语句。

private String selectPersonSql() {
    
  return new SQL() {
    {
    
    SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
    SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
    FROM("PERSON P");
    FROM("ACCOUNT A");
    INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
    INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
    WHERE("P.ID = A.ID");
    WHERE("P.FIRST_NAME like ?");
    OR();
    WHERE("P.LAST_NAME like ?");
    GROUP_BY("P.ID");
    HAVING("P.LAST_NAME like ?");
    OR();
    HAVING("P.FIRST_NAME like ?");
    ORDER_BY("P.ID");
    ORDER_BY("P.FULL_NAME");
  }}.toString();
}

不用担心可能出现重复的“AND”关键字,也不必担心“WHERE”拼接、“AND”拼接或不拼接的选择。 SQL 类已经处理了在哪里插入“WHERE”、在哪里使用“AND”,并为您完成所有字符串连接。

import org.apache.ibatis.jdbc.SQL;

public class MysqlMaker {
    
    public String selectPersonSql() {
    
        return new SQL() {
    {
    
            SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
            SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
            FROM("PERSON P");
            FROM("ACCOUNT A");
            INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
            INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
            WHERE("P.ID = A.ID");
            WHERE("P.FIRST_NAME like ?");
            OR();
            WHERE("P.LAST_NAME like ?");
            GROUP_BY("P.ID");
            HAVING("P.LAST_NAME like ?");
            OR();
            HAVING("P.FIRST_NAME like ?");
            ORDER_BY("P.ID");
            ORDER_BY("P.FULL_NAME");
        }}.toString();
    }
}

在这里插入图片描述

陈述 描述
选择(字符串) 开始新的 SELECT 子句或附加到现有的 SELECT 子句。可以多次调用,参数将附加到 SELECT 子句中。参数通常采用逗号分隔的列名和别名列表,但可以是数据库驱动程序接受的任何参数。
SELECT_DISTINCT(字符串) 开始一个新的或附加到现有的 SELECT 子句,并将 DISTINCT 关键字添加到结果查询中。可以多次调用,参数将附加到 SELECT 子句中。参数通常采用逗号分隔的列名和别名列表,但可以是数据库驱动程序接受的任何参数。
来自(字符串) 开始新的 FROM 子句或附加到现有的 FROM 子句。可以多次调用,参数将附加到FROM子句中。该参数通常是表名或别名,或者数据库驱动程序接受的任何参数。
JOIN(字符串)、INNER_JOIN(字符串)、LEFT_OUTER_JOIN(字符串)、RIGHT_OUTER_JOIN(字符串) 根据调用的方法,添加适当类型的新 JOIN 子句。参数可以包含由列和连接条件组成的标准连接。
哪里(字符串) 插入新的 WHERE 子句条件并使用 AND 将其连接起来。可以多次调用,每次调用产生的新条件会使用AND拼接在一起。要使用 OR 分隔,请使用 OR()。
或者() 使用 OR 分隔当前的 WHERE 子句条件。可以多次调用,但连续多次调用会生成错误的SQL。
和() 使用 AND 分隔当前的 WHERE 子句条件。可以多次调用,但连续多次调用会生成错误的SQL。由于 WHERE 和 HAVING 都会自动使用 AND 拼接,因此该方法并不常用,仅为了完整性而定义。
GROUP_BY(字符串) 附加一个新的 GROUP BY 子句,并用逗号连接。可以多次调用,每次调用都使用逗号连接新条件。
有(字符串) 附加新的 HAVING 子句。使用 AND 拼接。可以多次调用,每次调用使用AND来拼接新的条件。要使用 OR 分隔,请使用 OR()。
ORDER_BY(字符串) 使用逗号连接附加新的 ORDER BY 子句。可以多次调用,每次调用都会使用逗号拼接新的条件。
限制(字符串),限制(整数) 附加新的 LIMIT 子句。仅在 SELECT()、UPDATE()、DELETE() 中有效。在 SELECT() 中使用时,应与 OFFSET() 结合使用。
OFFSET(字符串),OFFSET(长) 附加新的 OFFSET 子句。仅在 SELECT() 时有效。与 SELECT() 一起使用时,应与 LIMIT() 结合使用。
OFFSET_ROWS(字符串),OFFSET_ROWS(长) 追加新的 OFFSET n ROWS 子句。仅在 SELECT() 时有效。此方法应与 FETCH_FIRST_ROWS_ONLY() 结合使用。
FETCH_FIRST_ROWS_ONLY(字符串),FETCH_FIRST_ROWS_ONLY(整数) 附加新的 FETCH FIRST n ROWS ONLY 子句。仅在 SELECT() 时有效。此方法应与 OFFSET_ROWS() 结合使用。
DELETE_FROM(字符串) 开始一条新的删除语句并指定被删除表的表名。通常后跟 WHERE 子句
INSERT_INTO(字符串) 开始一个新的插入语句并指定要插入数据表的表名。这之后应该是一个或多个 VALUES() 调用,或者 INTO_COLUMNS() 和 INTO_VALUES() 调用。
设置(字符串) 将“设置”属性列表附加到更新语句
更新(字符串) 开始一个新的更新语句并指定更新表的表名。随后是一个或多个 SET() 调用,通常是 WHERE() 调用。
值(字符串,字符串) 将数据值追加到插入语句中。第一个参数是插入数据的列名,第二个参数是数据值。
INTO_COLUMNS(字符串...) 将插入列子句附加到插入语句。应与 INTO_VALUES() 一起使用。
INTO_VALUES(字符串...) 将插入值子句附加到插入语句。应与 INTO_COLUMNS() 一起使用。
添加行() 添加新行数据以执行批量插入。

mybatis中文网站

MyBatis generator

Myabtis开发需要配置大量的XML,但配置XML文件也是一个非常繁琐的过程,而且会出现很多难以定位的错误。当工作时需要生成大量对象时,重复性工作太多,根本没有用处。于是,MyBatis Generator正式开发出来。只需要少量的简单配置,就可以完成大量表生成Java对象的工作。它具有零错误、速度快的优点,使开发人员能够更加专注于业务逻辑的开发。

MyBatis Generator,简称MBG,可以生成三种类型的文件:

(1)Model实体文件,一个数据库表对应生成一个 Model 实体;
(2)Mapper接口文件,数据数操作方法都在此接口中定义;
(3)Mapper XML配置文件

下载MyBatis Generator后,配置generatorConfig.xml文件,然后通过命令行运行MyBatis Generator构建代码。 Maven项目需要导入依赖。

mybatis-generator的运行流程:首先连接数据库-->从数据库表中获取字段-->根据字段生成mapper、dao、domain文件。

默认情况下,mybatis-generator会将数据中的下划线转换为Java的驼峰式大小写规则并生成实体类。其他相关配置通过generator设置。

  1. 导入插件依赖项
<plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
</plugin>
  1. 配置generatorConfig.xml文件
<?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>
<!-- classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
    <classPathEntry location="D:\Java\apache-maven-3.6.3-bin\repository\mysql\mysql-connector-java\8.0.29\mysql-connector-java-8.0.29.jar"/>

    <!-- 一个数据库一个context -->
    <context id="testTables" targetRuntime="MyBatis3">
        <!-- 自定义的注释规则,继承 DefaultCommentGenerator 重写 一些方法 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--配置数据库连接-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/smbms?characterEncoding=utf8" userId="root" password="Xwh190823">
        </jdbcConnection>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!--生成entity类存放位置-->
        <javaModelGenerator targetPackage="com.example.generator1.pojo" targetProject="src/main/java">
            <!--...-->
            <property name="enableSubPackages" value="true"/>
            <!--从数据库返回的值清理前后的空格-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--生成mapper映射文件存放位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <!--是否允许建立子包(对应MySql的scheme)-->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!--生成Dao类存放位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.generator1.dao" targetProject="src/main/java">
            <!--是否允许建立子包-->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>


        <!-- 数据表设置 -->
        <!--要生成表tableName是是数据库表表名-->
        <table tableName="smbms_user" domainObjectName="User" enableSelectByExample="false" selectByExampleQueryId="false" enableDeleteByExample="false" enableUpdateByExample="false" enableCountByExample="false">
            <!--使用列名作为属性名?true:是,false:否-->
            <property name="useActualColumnNames" value="false"/>
        </table>
    </context>
</generatorConfiguration>

  1. 运行插件来构建项目

在这里插入图片描述

  1. 构建成功

在这里插入图片描述

  1. 测试代码

测试需要SqlSession对象需要再创建mybatis-config.xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/smbms?characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

测试代码:

public class Test1 {
    
    @Test
    public void method1() throws IOException {
    
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.selectByPrimaryKey(3L);
        System.out.println(user);
    }
}

在这里插入图片描述

查询的结果不一定是你想要的。自己添加sql语句就可以了。 Mybatis-generator帮助我们省略了大部分重复、繁琐的步骤。

更多generatorConfig.xml配置参考:

<?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>
<!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用${propertyKey}的方式来引用配置项 resource:配置资源加载地址,使用resource,MBG从classpath开始找,比如com/myproject/generatorConfig.properties url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties. 注意,两个属性只能选址一个; 另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用 <properties resource="" url="" /> -->
 
 <!-- 在MBG工作的时候,需要额外加载的依赖包 location属性指明加载jar/zip包的全路径 <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" /> -->
  
<!-- context:生成一组对象的环境 id:必选,上下文id,用于在生成错误时提示 defaultModelType:指定生成对象的样式 1,conditional:类似hierarchical; 2,flat:所有内容(主键,blob)等全部生成在一个对象中; 3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class) targetRuntime: 1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample; 2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample; introspectedColumnImpl:类全限定名,用于扩展MBG -->
<context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple" >
 
    <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表; 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
    <property name="autoDelimitKeywords" value="false"/>
    <!-- 生成的Java文件的编码 -->
    <property name="javaFileEncoding" value="UTF-8"/>
    <!-- 格式化java代码 -->
    <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
    <!-- 格式化XML代码 -->
    <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
    
    <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
    <property name="beginningDelimiter" value="`"/>
    <property name="endingDelimiter" value="`"/>
    
    <!-- 必须要有的,使用这个配置链接数据库 @TODO:是否可以扩展 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql:///pss" userId="root" password="admin">
        <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
    </jdbcConnection>
    
    <!-- java类型处理器 用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl; 注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型; -->
    <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
        <!-- true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型 false:默认, scale>0;length>18:使用BigDecimal; scale=0;length[10,18]:使用Long; scale=0;length[5,9]:使用Integer; scale=0;length<5:使用Short; -->
        <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>
    
    
    <!-- java模型创建器,是必须要的元素 负责:1,key类(见context的defaultModelType);2,java类;3,查询类 targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制; targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录 -->
    <javaModelGenerator targetPackage="com._520it.mybatis.domain" targetProject="src/main/java">
        <!-- for MyBatis3/MyBatis3Simple 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter; -->
        <property name="constructorBased" value="false"/>
        
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
        
        <!-- for MyBatis3 / MyBatis3Simple 是否创建一个不可变的类,如果为true, 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类 -->
        <property name="immutable" value="false"/>
        
        <!-- 设置一个根对象, 如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项 注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括: 1,属性名相同,类型相同,有相同的getter/setter方法; -->
        <property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/>
        
        <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    
    
    <!-- 生成SQL map的XML文件生成器, 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口), 或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置 targetPackage/targetProject:同javaModelGenerator -->
    <sqlMapGenerator targetPackage="com._520it.mybatis.mapper" targetProject="src/main/resources">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>
    
    
    <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 targetPackage/targetProject:同javaModelGenerator type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下): 1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML; 2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中; 3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML; 注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER -->
    <javaClientGenerator targetPackage="com._520it.mybatis.mapper" type="ANNOTATEDMAPPER" targetProject="src/main/java">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
        
        <!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查 <property name="rootInterface" value=""/> -->
    </javaClientGenerator>
    
    <!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素 选择的table会生成一下文件: 1,SQL map文件 2,生成一个主键类; 3,除了BLOB和主键的其他字段的类; 4,包含BLOB的类; 5,一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选; 6,Mapper接口(可选) tableName(必要):要生成对象的表名; 注意:大小写敏感问题。正常情况下,MBG会自动的去识别数据库标识符的大小写敏感度,在一般情况下,MBG会 根据设置的schema,catalog或tablename去查询数据表,按照下面的流程: 1,如果schema,catalog或tablename中有空格,那么设置的是什么格式,就精确的使用指定的大小写格式去查询; 2,否则,如果数据库的标识符使用大写的,那么MBG自动把表名变成大写再查找; 3,否则,如果数据库的标识符使用小写的,那么MBG自动把表名变成小写再查找; 4,否则,使用指定的大小写格式查询; 另外的,如果在创建表的时候,使用的""把数据库对象规定大小写,就算数据库标识符是使用的大写,在这种情况下也会使用给定的大小写来创建表名; 这个时候,请设置delimitIdentifiers="true"即可保留大小写格式; 可选: 1,schema:数据库的schema; 2,catalog:数据库的catalog; 3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName 4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面; 5,enableInsert(默认true):指定是否生成insert语句; 6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get); 7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句; 8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update); 9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete); 10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句; 11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询); 12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性); 13,modelType:参考context元素的defaultModelType,相当于覆盖; 14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性) 15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性 注意,table里面很多参数都是对javaModelGenerator,context等元素的默认属性的一个复写; -->
    <table tableName="userinfo" >
        
        <!-- 参考 javaModelGenerator 的 constructorBased属性-->
        <property name="constructorBased" value="false"/>
        
        <!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; -->
        <property name="ignoreQualifiersAtRuntime" value="false"/>
        
        <!-- 参考 javaModelGenerator 的 immutable 属性 -->
        <property name="immutable" value="false"/>
        
        <!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 -->
        <property name="modelOnly" value="false"/>
        
        <!-- 参考 javaModelGenerator 的 rootClass 属性 <property name="rootClass" value=""/> -->
         
        <!-- 参考javaClientGenerator 的 rootInterface 属性 <property name="rootInterface" value=""/> -->
        
        <!-- 如果设置了runtimeCatalog,那么在生成的SQL中,使用该指定的catalog,而不是table元素上的catalog <property name="runtimeCatalog" value=""/> -->
        
        <!-- 如果设置了runtimeSchema,那么在生成的SQL中,使用该指定的schema,而不是table元素上的schema <property name="runtimeSchema" value=""/> -->
        
        <!-- 如果设置了runtimeTableName,那么在生成的SQL中,使用该指定的tablename,而不是table元素上的tablename <property name="runtimeTableName" value=""/> -->
        
        <!-- 注意,该属性只针对MyBatis3Simple有用; 如果选择的runtime是MyBatis3Simple,那么会生成一个SelectAll方法,如果指定了selectAllOrderByClause,那么会在该SQL中添加指定的这个order条件; -->
        <property name="selectAllOrderByClause" value="age desc,username asc"/>
        
        <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
        <property name="useActualColumnNames" value="false"/>
        
        
        <!-- generatedKey用于生成生成主键的方法, 如果设置了该元素,MBG会在生成的<insert>元素中生成一条正确的<selectKey>元素,该元素可选 column:主键的列名; sqlStatement:要生成的selectKey语句,有以下可选项: Cloudscape:相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL() DB2 :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL() DB2_MF :相当于selectKey的SQL为:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1 Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL() HSQLDB :相当于selectKey的SQL为:CALL IDENTITY() Informix :相当于selectKey的SQL为:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1 MySql :相当于selectKey的SQL为:SELECT LAST_INSERT_ID() SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY() SYBASE :相当于selectKey的SQL为:SELECT @@IDENTITY JDBC :相当于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty属性 <generatedKey column="" sqlStatement=""/> -->
        
        <!-- 该元素会在根据表中列名计算对象属性名之前先重命名列名,非常适合用于表中的列都有公用的前缀字符串的时候, 比如列名为:CUST_ID,CUST_NAME,CUST_EMAIL,CUST_ADDRESS等; 那么就可以设置searchString为"^CUST_",并使用空白替换,那么生成的Customer对象中的属性名称就不是 custId,custName等,而是先被替换为ID,NAME,EMAIL,然后变成属性:id,name,email; 注意,MBG是使用java.util.regex.Matcher.replaceAll来替换searchString和replaceString的, 如果使用了columnOverride元素,该属性无效; <columnRenamingRule searchString="" replaceString=""/> -->
         
         
         <!-- 用来修改表中某个列的属性,MBG会使用修改后的列来生成domain的属性; column:要重新设置的列名; 注意,一个table元素中可以有多个columnOverride元素哈~ -->
         <columnOverride column="username">
            <!-- 使用property属性来指定列要生成的属性名称 -->
            <property name="property" value="userName"/>
            
            <!-- javaType用于指定生成的domain的属性类型,使用类型的全限定名 <property name="javaType" value=""/> -->
             
            <!-- jdbcType用于指定该列的JDBC类型 <property name="jdbcType" value=""/> -->
             
            <!-- typeHandler 用于指定该列使用到的TypeHandler,如果要指定,配置类型处理器的全限定名 注意,mybatis中,不会生成到mybatis-config.xml中的typeHandler 只会生成类似:where id = #{id,jdbcType=BIGINT,typeHandler=com._520it.mybatis.MyTypeHandler}的参数描述 <property name="jdbcType" value=""/> -->
            
            <!-- 参考table元素的delimitAllColumns配置,默认为false <property name="delimitedColumnName" value=""/> -->
         </columnOverride>
         
         <!-- ignoreColumn设置一个MGB忽略的列,如果设置了改列,那么在生成的domain中,生成的SQL中,都不会有该列出现 column:指定要忽略的列的名字; delimitedColumnName:参考table元素的delimitAllColumns配置,默认为false 注意,一个table元素中可以有多个ignoreColumn元素 <ignoreColumn column="deptId" delimitedColumnName=""/> -->
    </table>
    
</context>
 
</generatorConfiguration>

参考文献1
参考2感谢作者。

. . .

相关推荐

额外说明

【Python教程入门】第58章 使用高级函数解包元组

本篇我们介绍如何在 Python 中对元组进行解包(unpack),也就是将元组中的元素赋值给多个不同的变量。 元组回顾 第 29 篇介绍了元组的一些基本概念和操作。实际上,Python 使用逗号(,),而不是括号(())定义元组。例如,以下代码定义了一

额外说明

深度学习应用篇-计算机视觉-图像增广[1]:数据增广、图像混叠、图像剪裁类变化类等详解

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、

额外说明

Android —— UI高级样式自定义

QQ 1274510382 Wechat JNZ_aming 商业互捧 QQ群538250800 技术搞事 QQ群599020441 技术合作 QQ群152889761 加入我们 QQ群649347320 纪年科技aming 网络安全 ,深度学习,嵌入式

额外说明

【万物皆可 GAN】CycleGAN 原理详解

【万物皆可 GAN】CycleGAN 原理详解 概述 CycleGAN 可以做什么 图片转换 图片修复 换脸 CycleGAN 网络结构 CycleGAN 损失函数 概述 CycleGAN (Cycle Generative Adversarial Ne

额外说明

【JavaEE】IO 操作

文章目录 前言 什么是 IO Reader 读操作 1. 创建 Reader 类 2. 理解 Reader 类中的不同 read 方法 3. 使用 Reader 类当中的不同 read 方法 3. 关闭文件操作 Writer 写操作 1. 创建出 Wri

额外说明

【Python 随练】插入元素到已排序数组

题目: 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 简介: 在本篇博客中,我们将解决一个数组操作问题:将一个数插入已经排好序的数组中,同时保持原有的排序规律。我们将介绍插入元素到数组的概念,并提供一个完整的代码示例来实现该功能

额外说明

Java代码弱点与修复之——BC: Bad casts of object references(错误的强制类型转换)

弱点描述 Bad casts of object references: 错误的强制类型转换。在Coverity中,属于低风险漏洞。在FindBugs中, 该类型错误的编号是FB.BC_UNCONFIRMED_CAST,它表示存在可能存在不安全的类型转换

额外说明

Java 为什么要 try catch?

一、描述 一个学在Java的室友问我,明明都知道错误为什么还要try catch 处理异常啊?以下文章是我对其的一点思考。 二、为什么要try catch? 明白Java 中的 try catch是什么? 首先,try catch是Java中处理 异常

额外说明

Win11系统由于找不到xactengine3_0.dll导致程序无法启动问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个xactengine3_0.dll文件进行安装(前提是找到适合

额外说明

Navicat16安装教程

注:由于版权原因,本文已删除破解相关文件和内容 1、从本站下载解压后,可以获得Navicat16安装包和破解补丁,如图 2.双击“navicat160_premium_cs_x64.exe”程序进入安装界面。 3, 点击下一步 4,勾选如图所示的“我同意

ads via 小工具