我怎么能阻止Mybatis覆盖DAO中已经生成的映射器文件?

时间:2013-01-21 09:38:21

标签: mybatis

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

<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插件。那有什么方法可以做到吗?我很感激你们的帮助。

2 个答案:

答案 0 :(得分:4)

我认为MyBatis Generator Tool无法更新生成文件的部分内容。

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

<mybatis.generator.overwrite>false</mybatis.generator.overwrite>
PS:我的上述假设是错误的。

来自MyBatis文档:

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

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

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

  4.   

答案 1 :(得分:1)

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

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

  2. MyMapperBits.xml添加到主mybatis配置文件中的引用。在此示例中,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. 然后您可以访问&#34; SQL&#34;使用MyMapperBits.xml,通过文件

    中定义的命名空间访问它
    sqlSession . selectList(
    "MyMapperBitsMapperNameSpace.selectTop20PlayerOfClassicCard" ) ;