1

由于需求在变化,我需要时常使用Mybatis更新DAO的mapper文件。这是我遇到的问题:我们已经生成了一组映射器 xml 文件,此外,我们在映射器文件中定义了自己的特定元素。

<select id="selectTop20PlayerOfClassicCard" resultMap="CollectionRankingMap">
    SELECT playerid,count(cardid) from re_player_card where type in (0,1) GROUP
    BY playerid ORDER BY COUNT(*) DESC limit 20;
</select>

<select id="selectTop20PlayerOfSpecialCard" resultMap="CollectionRankingMap">
    SELECT playerid,count(cardid) from re_player_card where type=2 GROUP BY
    playerid ORDER BY COUNT(*) DESC limit 20;
</select>

<resultMap id="CollectionRankingMap" type="dymaic.RePlayerCardRanking">
    <!-- manually generated -->
    <result column="playerid" jdbcType="INTEGER" property="playerid" />
    <result column="count(cardid)" jdbcType="INTEGER" property="count" />
</resultMap>

<select id="getCardIdByPlayerId" parameterType="int" resultType="int">
    select
    re_player_card.cardid
    from re_player_card
    where playerid = #{playerid}
</select>

3个select语句和resultmap都是我们自己定义的。现在我将再次重新生成映射器文件。但我不希望这些语句块被覆盖。我需要将它们保存在映射器文件中,同时使用 Mybatis 更改其余部分。

我正在使用 Mybatis 生成器 eclipse 插件。那么有什么方法可以实现吗?我很感激你们的帮助。

4

2 回答 2

4

我不认为 MyBatis Generator Tool 能够更新生成文件的部分内容。

如果您使用的是 MyBatis Generator Maven 插件,您可以在 pom.xml 中添加以下属性,以告知不要覆盖现有文件并生成具有其他名称的文件。

<mybatis.generator.overwrite>false</mybatis.generator.overwrite>

PS:我上面的假设是错误的。

来自 MyBatis 文档:

MyBatis 生成器旨在在迭代开发环境中良好运行,并且可以作为 Ant 任务或 Maven 插件包含在持续构建环境中。迭代运行 MBG 时需要注意的重要事项包括:

  1. 如果存在与新生成的 XML 文件同名的现有文件,MBG 将自动合并 XML 文件。MBG 不会覆盖您对其生成的 XML 文件所做的任何自定义更改。您可以一遍又一遍地运行它,而不必担心丢失对 XML 的自定义更改。

  2. MBG 将替换之前运行中生成的任何 XML 元素。MBG 不会合并 Java 文件,它可以覆盖现有文件或使用不同的唯一名称保存新生成的文件。如果您对生成的 Java 文件进行更改并迭代运行 MBG,则必须手动合并更改。当作为 Eclipse 插件运行时,MBG 可以自动合并 Java 文件。

于 2013-01-28T06:23:55.120 回答
2

将您的更改放入另一个映射器 XML 文件

  1. 获取现有文件副本,例如MyMapperBits.xml,我选择更改命名空间..."http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="MyMapperBitsMapperNameSpace">

  2. 在你的主 mybatis 配置文件中添加MyMapperBits.xml引用。在这个例子中,package name项目还包含各种 XML 映射器,我已经配置了 mybatis 生成器来创建它们。

     <mappers>
         <mapper resource="com/example/extended/xmlmapper/MyMapperBits.xml" />
         <package name="com.exmaple.generated.xmlmapper.input_output"/>
         <package name="com.exmaple.generated.xmlmapper.pg_schema_1"/>
         <package name="com.exmaple.generated.xmlmapper.pg_schema_2"/>
    </mappers>
    
  3. 然后,您可以通过文件中定义的命名空间访问 MyMapperBits.xml 来访问“SQL”

    sqlSession . selectList(
    "MyMapperBitsMapperNameSpace.selectTop20PlayerOfClassicCard" ) ;
    
于 2015-05-18T11:12:39.473 回答