IDEA->EasyCode(mapper.xml) SQL语句字段没有逗号分隔问题

SQL语句字段没有逗号分隔问题

问题

更新idea IntelliJ IDEA 2023.1.2以上的版本后出现无逗号分隔问题,下面图片是问题,生成没有逗号分隔,用不了

生成的效果如下

在这里插入图片描述

解决方案

在easycode的设置里找到Template下的mapper.xml.vm脚本和Global Config下的mybatisSupport.vm脚本,
然后将这两个脚本里的 $velocityHasNext 替换成 $foreach.hasNext,
然后保存设置。之后新生成的mapper.xml里就不会出现没有逗号间隔的问题了。

贴上效果

没有调整过这个文件的人 粘贴进去即可使用
##针对Mybatis 进行支持,主要用于生成xml文件
#foreach($column in $tableInfo.fullColumn)
    ##储存列类型
    $tool.call($column.ext.put("sqlType", $tool.getField($column.obj.dataType, "typeName")))
    #if($tool.newHashSet("java.lang.String").contains($column.type))
        #set($jdbcType="VARCHAR")
    #elseif($tool.newHashSet("java.lang.Boolean", "boolean").contains($column.type))
        #set($jdbcType="BOOLEAN")
    #elseif($tool.newHashSet("java.lang.Byte", "byte").contains($column.type))
        #set($jdbcType="BYTE")
    #elseif($tool.newHashSet("java.lang.Integer", "int", "java.lang.Short", "short").contains($column.type))
        #set($jdbcType="INTEGER")
    #elseif($tool.newHashSet("java.lang.Long", "long").contains($column.type))
        #set($jdbcType="INTEGER")
    #elseif($tool.newHashSet("java.lang.Float", "float", "java.lang.Double", "double").contains($column.type))
        #set($jdbcType="NUMERIC")
    #elseif($tool.newHashSet("java.util.Date", "java.sql.Timestamp", "java.time.Instant", "java.time.LocalDateTime", "java.time.OffsetDateTime", "        java.time.ZonedDateTime").contains($column.type))
        #set($jdbcType="TIMESTAMP")
    #elseif($tool.newHashSet("java.sql.Date", "java.time.LocalDate").contains($column.type))
        #set($jdbcType="TIMESTAMP")
    #else
        ##其他类型
        #set($jdbcType="VARCHAR")
    #end
    $tool.call($column.ext.put("jdbcType", $jdbcType))
#end

##定义宏,查询所有列
#macro(allSqlColumn)#foreach($column in $tableInfo.fullColumn)$column.obj.name#if($foreach.hasNext), #end#end#end
<think>好的,用户的问题是关于在IntelliJ IDEA中如何格式化MyBatis的Mapper.xml文件中的动态SQL。我需要先回想一下相关的工具或插件,以及IDEA本身的设置。 首先,用户提到动态SQL,比如<if>、<choose>、<foreach>这些标签,这些在Mapper.xml中经常使用,但有时候格式化可能不够理想。IDEA自带的XML格式化功能可能无法很好地处理动态SQL的缩进和换行,特别是当SQL语句较长时。 我记得有一个叫做MyBatisCodeHelper-Pro的插件,这个插件对MyBatis的支持比较好,包括动态SQL的格式化。另外,用户可能不知道这个插件,或者需要确认是否有其他方法。同时,IDEA本身有没有设置可以调整XML格式化的规则呢? 然后,查看用户提供的引用内容,引用[2]提到了动态SQL的set/if标签,引用[3]提到了resultMap和动态SQLxml使用,引用[4]提到了使用EasyCode生成代码,引用[5]展示了Service接口。这些引用可能帮助确认用户正在处理MyBatis的相关文件,并且可能需要更专业的格式化工具。 接下来,我需要分步骤回答用户的问题。首先,推荐使用插件,比如MyBatisCodeHelper-Pro,因为它专门支持MyBatis,能优化动态SQL的格式化。其次,调整IDEA自带的XML格式化设置,比如缩进、换行等,可能改善效果。另外,还可以考虑使用外部的格式化工具,比如MyBatis的DTD文件,帮助IDEA更好地识别标签。 还需要考虑用户是否了解如何安装插件,可能需要简要说明安装步骤。同时,提醒用户在格式化前备份文件,避免意外情况。另外,可能存在的其他问题,比如SQL语句中的注释处理,或者特殊标签的格式化,也需要提及可能的解决方案。 最后,生成相关问题,帮助用户扩展了解,比如动态SQL的调试、插件推荐、其他工具比较等。</think>在 IntelliJ IDEA 中格式化 MyBatis Mapper.xml 文件的动态 SQL,可通过以下方法实现: --- ### 方法一:使用 IDEA 原生 XML 格式化 1. **快捷键格式化** 打开 Mapper.xml 文件,按 `Ctrl + Alt + L`(Windows/Linux)或 `Cmd + Option + L`(Mac)直接格式化。 *注意:IDEA 默认的 XML 格式化可能无法完美处理动态 SQL 的缩进,需结合设置优化*[^2]。 2. **调整 XML 格式化规则** - 进入 `Settings → Editor → Code Style → XML` - 在 `Tabs and Indents` 中设置缩进为 **2-4 空格** - 在 `Other` 标签页勾选 `Keep line breaks` 和 `Keep whitespaces` 避免动态 SQL 标签被压缩[^4]。 --- ### 方法二:安装 MyBatis 专用插件 推荐使用 **MyBatisCodeHelper-Pro** 插件: 1. **安装步骤** - 打开 `Settings → Plugins`,搜索并安装 **MyBatisCodeHelper-Pro** - 重启 IDEA 后,插件会自动优化动态 SQL 的语法高亮和格式化逻辑[^3]。 2. **插件特性** - 自动识别 `<if>`, `<foreach>`, `<choose>` 等动态标签 - 支持 SQL 语句的智能补全和缩进优化 - 提供 XML 与 Java 接口的映射跳转[^3]。 --- ### 方法三:手动调整动态 SQL 结构 对于复杂嵌套的 SQL,可手动添加注释辅助格式化: ```xml <select id="findByCondition"> SELECT * FROM table <where> <!-- 动态条件示例 --> <if test="name != null"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </where> </select> ``` *通过换行和注释明确逻辑块边界,提升可读性*[^2][^4]。 --- ### 方法四:使用外部工具(备用方案) 若 IDEA 格式化效果仍不理想,可通过以下工具预处理: 1. **在线格式化工具**:如 [MyBatis Formatter](https://codebeautify.org/xmlviewer) 2. **Maven 插件**:配置 `mybatis-formatter-maven-plugin` 在构建时自动格式化[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿泽java

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值