我正在使用 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/