在mybatis中注入sql

inject sql in mybatis

我正在使用 Spring MyBatis 在 table 中插入一行。问题是在我的 h2 数据库中我还没有创建 table,我想即时创建

这是我当前的 spring 上下文配置

<sql id="CREATE_TABLE">
    CREATE TABLE ENTITY(ENTITY_ID INT PRIMARY KEY, TITLE VARCHAR(255),DESCRIPTION VARCHAR(255) )
</sql>

<insert id="CREATE" parameterType="com.dao.entity.dto.EntityDaoDTO">
    INSERT INTO
    ENTITY
    (ENTITY_ID, TITLE, DESCRIPTION)
    VALUES
    (#{entityId},#{title},#{description})

</insert>

如何指定 sql 标记必须在插入发生之前执行?

我是 运行 h2 作为 java 通过 maven 的进程

                     <execution>
                        <id>start-h2</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>

                        <configuration>
                            <name>start-h2-f2e</name>
                            <waitAfterLaunch>2</waitAfterLaunch>
                            <workingDir>../../../h2/sakila-h2-master/</workingDir>
                            <arguments>
                                <argument>java</argument>
                                <argument>-cp</argument>
                                <argument>h2-1.3.161.jar</argument>
                                <argument>org.h2.tools.Server</argument>
                                <argument>-ifExists</argument>
                                <argument>-tcp</argument>
                                <argument>-web</argument>
                                <argument>-tcpAllowOthers</argument>
                            </arguments>
                        </configuration>
                    </execution>

此致

查看 DB 初始化 here

事实上,您需要在 spring 中添加这样的内容

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="classpath:database/scripts/init-db.ddl" />
</jdbc:initialize-database>

其中dataSource是要初始化的h2数据源。所有数据库结构创建和一些初始数据插入都可以在单独的 DDL/SQL 脚本中完成。

您只需在启动时为内存中的 H2 DB 执行它们。