mybatis-generator xml,java合并问题

mybatis-generator 简介

	Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。项目中常用的:
     StudentExample example = new StudentExample();
     StudentExample.Criteria criteria = example.createCriteria();
     deleteByExample
     insert
     insertSelective	
     selectByExample ..等等诸如此类的方法,均是通过mybatis-genenrator可以自动生成的 使得开发起来很方便。
     mybatis-generator 生成的sql xml几乎涵盖了单表的所有增删改查方法。很方便

mybatis-generator 问题

(mybatis-generator默认合并指的是 123 , 234 合并完 是 123234,而我们需要的结果是1234)

   1  生成一次 CourseMapper.java,CourseMapper.xml等文件。
   2  现在需要加个批量插入方法,在CouseMapper.java里加  
       public int batchInsert(List<Course> list);
       在CourseMapper.xml里加
         <insert id="batchInsert" parameterType="cc.gukeer.smartBoard.persistence.entity.Course">
            your sql
         </insert>
   3  现在数据库加了个字段a,需要对文件再次生成  我们发现,xml里面,updateByPrimaryKey 这样的方法再次生成了一次,而且CourseMapper.java里 的batchInsert 这个方法已经没有了。之前写的代码也就被覆盖了或者出现了问题。我们必须得回滚。。
       
   4 为了解决这个问题,我们不得不扩展 CourseMapper.xml 
   写 A_CourseMapper.xml 对应 CourseMapper.xml 
   写 A_CourseMapper.xml 对应 CourseMapper.xml
   并把我们的批量方法写到A_***里面,这样再次生成就不会被覆盖了。那么问题来了:

这里写图片描述

   从图中可以看到,这无疑使得我们的文件更繁多,维护更加复杂。

问题解决-xml合并

出现这个问题的原因,我们主要来看一下generator的源码:
org.mybatis.generator.api.MyBatisGenerator 的generate方法,是生成文件的一个入口。


for (GeneratedXmlFile gxf : this.generatedXmlFiles){
  this.projects.add(gxf.getTargetProject());
  File targetFile;
  String source;
  try{
    File directory = this.shellCallback.getDirectory(gxf.getTargetProject(), gxf.getTargetPackage());
    targetFile = new File(directory, gxf.getFileName());
    if (targetFile.exists()){
      String source;
      if (gxf.isMergeable()){
        source = XmlFileMergerJaxp.getMergedSource(gxf, targetFile);
      }else if (this.shellCallback.isOverwriteEnabled()){
        String source = gxf.getFormattedContent();
        this.warnings.add(Messages.getString("Warning.11", targetFile.getAbsolutePath()));
      }else{
      String source = gxf.getFormattedContent();
        targetFile = getUniqueFileName(directory, gxf.getFileName());
        this.warnings.add(Messages.getString("Warning.2", targetFile.getAbsolutePath()));
      }
    }

其中 有对gxf(GeneratedXmlFile) 是否合并判断,如果合并true,将新旧xml通过这个方法合并取合并得到的结果字符串,写到新的文件中。 XmlFileMergerJaxp.getMergedSource

XmlFileMergerJaxp.getMergedSource 部分代码如下:

    DocumentType newDocType = newDocument.getDoctype();
    ...
    List<Node> nodesToDelete = new ArrayList();
    NodeList children = ex
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToBeYourBaBa

你支持下,我才有兴趣更新

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值