mysql - MyBatis生成器: generate mappers with autoincrement fields that work both with Mysql and HSQLDB

标签 mysql generator auto-increment hsqldb mybatis

我正在使用 MyBatis Generator 为我的 Mysql 数据库生成映射器。 我有一些带有自动增量字段的表,因此我将它们声明为“generatedKey”,并且它们按预期工作。

现在我想使用 HSQLDB 为我的 JUnit 测试创建内存数据库。 我启用了 HSQLDB 的 MySQL 语法,但我的映射器无法工作,因为为获取自动增量字段的最后一个值生成的语句不兼容。

这是MyBatis Generator的配置文件:

<generatorConfiguration>
<classPathEntry location="D:\mysql-connector-java-5.1.29.jar" />
<context id="Mysql" targetRuntime="MyBatis3">
    <plugin type="org.mybatis.generator.plugins.SerializablePlugin">
        <property name="suppressJavaInterface" value="false"/>
    </plugin>
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="xxxxxxxxxxxxxxxxxxxxxx"
        userId="xxxxx"
        password="xxxxx">
    </jdbcConnection>
    <javaModelGenerator targetPackage="it.test.dbTablesDTO" targetProject="src\main\java">
        <property name="enableSubPackages" value="true" />
        <property name="trimStrings" value="true" />
    </javaModelGenerator>
    <sqlMapGenerator targetPackage="it.test.dbTables" targetProject="src\main\resources">
        <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>
    <javaClientGenerator targetPackage="it.test.dbTables" type="XMLMAPPER" targetProject="src\main\java">
        <property name="enableSubPackages" value="true" />
    </javaClientGenerator>
    <table tableName="history" schema="hist">
        <generatedKey column="id_history" sqlStatement="MySql"/>
    </table>
</context>

我还尝试按照手册中的说明更改“JDBC”中sqlStatement的值,但使用此值既不适用于MySQL,也不适用于HSQLDB。

这是使用 sqlStatement="MySql"生成的映射器(我已经删除了不感兴趣的行):

<insert id="insert" parameterType="it.xxxx.History">
<!--
  WARNING - @mbggenerated
  This element is automatically generated by MyBatis Generator, do not modify.
  This element was generated on Wed Jun 25 10:44:25 CEST 2014.
-->
<selectKey keyProperty="idHistory" resultType="java.lang.Long">
  SELECT LAST_INSERT_ID()
</selectKey>
insert into history(
  )
values (
  )

如您所见,“SELECT LAST_INSERT_ID()”语句显然与 Hypersonic 不兼容。

有什么想法吗?

最佳答案

尝试在 HSQLDB 中创建您自己的函数。

CREATE FUNCTION LAST_INSERT_ID() RETURNS BIGINT
   RETURN IDENTITY();

关于mysql - MyBatis生成器: generate mappers with autoincrement fields that work both with Mysql and HSQLDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456120/

相关文章:

python - Unix 管道上的惰性 python

python - 如何在python中对生成器类型进行排序

mysql:通过查找表从两个表中选择

mysql - 加载文件路径字符串并将其替换为 MySQL 数据库中该文件的内容

python - 是否可以通过 sqlalchemy 对数据库进行类似生成器的查询?

mysql - 增加mysql表中的所有值

MySql自增列增加10的问题

javascript - npm urllib ResponseTimeoutError - 如何增加超时?

Mysql Order by last name when full name for column

Mysql 无索引自增