2013-01-21 37 views
1

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

<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个选择语句和结果映射是由我们自己定义。现在我要重新生成映射器文件,但我不希望这些语句块被覆盖。我需要将它们保存在映射器文件中,同时使用Mybatis更改其余部分。

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

回答

4

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

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

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

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

从MyBatis的文档:

MyBatis的发电机被设计成在迭代开发环境中运行良好,并可以作为一个Ant任务或Maven插件,在连续构建环境。重要事项运行MBG时要注意反复包括:如果有一个现有的文件 具有相同的名称作为新生成的XML文件

  1. MBG将自动合并XML文件。 MBG不会 覆盖您对其生成的XML文件所做的任何自定义更改。 您可以反复运行它,而不用担心丢失对XML的自定义 更改。

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

1

把你变成另一个XML映射文件

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

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

  3. 此后,您可以通过文件

    sqlSession . selectList(
    "MyMapperBitsMapperNameSpace.selectTop20PlayerOfClassicCard") ; 
    
+0

感谢定义的命名空间访问它访问 “SQL” 与MyMapperBits.xml!但是......这个问题在2年前被问过了......我已经从mybatis迁移到了jpa + hibernate。 –