【问题记录】IDEA Mybatis *Mapper.xml 中 sql 无提示、无高亮、格式化失效问题 (已解决)

这篇具有很好参考价值的文章主要介绍了【问题记录】IDEA Mybatis *Mapper.xml 中 sql 无提示、无高亮、格式化失效问题 (已解决)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题
先说版本,win 11,idea 2023.1
如标题,想去格式化mybatis中写的sql,但是ctrl alt L 一顿处理,其中的sql没有按照sql命令的格式去格式化,此外写sql 无提示也无高亮
问题示例
未格式化前,显然格式已经差不多了,按理来说再格式化也就稍微调整

<select id="selectxx" resultType="java.util.HashMap">
		SELECT * from (SELECT p.project_code projectCode,
					 p.project_name projectName,
					 (SELECT count(*)
					  FROM table_os os
					  where os.project_code = p.project_code
						and os.del_flag = '0'
		<if test="query.saleCode!='' and query.saleCode!=null ">
			and os.sale_code like concat('%',#{query.saleCode},'%')
		</if>
		) as size
		FROM table_p p
		where p.del_flag='0'

		<if test="query.projectType!='' and query.projectType!=null">
			and p.project_type like concat('%',#{query.projectType},'%')
		</if>

		<if test="query.projectCode!='' and query.projectCode!=null">
			and p.project_code like concat('%',#{query.projectCode},'%')
		</if>

		<if test="query.projectName!='' and query.projectName!=null">
			and p.project_name like concat('%',#{query.projectName},'%')
		</if>
		) as php
		where size > 0
		order by size desc
	</select>

但格式化的结果是这样,显然sql的格式不对:

<select id="selectxx" resultType="java.util.HashMap">
		SELECT * from (SELECT p.project_code projectCode,
		p.project_name projectName,
		(SELECT count(*)
		FROM table_os os
		where os.project_code = p.project_code
		and os.del_flag = '0'
		<if test="query.saleCode!='' and query.saleCode!=null ">
			and os.sale_code like concat('%',#{query.saleCode},'%')
		</if>
		) as size
		FROM table_p p
		where p.del_flag='0'

		<if test="query.projectType!='' and query.projectType!=null">
			and p.project_type like concat('%',#{query.projectType},'%')
		</if>

		<if test="query.projectCode!='' and query.projectCode!=null">
			and p.project_code like concat('%',#{query.projectCode},'%')
		</if>

		<if test="query.projectName!='' and query.projectName!=null">
			and p.project_name like concat('%',#{query.projectName},'%')
		</if>
		) as php
		where size > 0
		order by size desc
	</select>

【半解决】
不能叫解决,只能说解决了一半。
先百度了一下,搜出来大多数解决方案都差不多,如下

  • 设置 → 语言方案 → sql方言 → 设为mysql(或其他 你用的数据库)
  • Database中配置MySQL的数据源

这两种方法试了都不行。在思否 这里 找到了一个,也就是半解决的方案,简要来说就是

  1. 选中sql代码
  2. 右键 → 显示上下文 → 注入语言或引用 → 在弹框中点选mysql或sql(或你的其他数据库)(其实可以搜索,虽然没有搜索框,但是默认取焦点,直接输入就可以搜索)
  3. 此时sql的高亮已经显示成功,再次格式化,发现sql格式化成功,如果你的idea连接了数据库,那么此时是可以有比如说select等关键字、表字段之类的联想提示

其他方法就是插件,见【后话】

【解决示例】
这里是思否那个的例子,只是贴出来
原代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace跟接口绑定-->
<mapper namespace="com.sunyard.monitor.dao.FlowMapper">
    <select id="queryFlowNum" resultType="com.sunyard.monitor.domain.Flow">
   select * from(select count(1) as flowNum from ccform_debit_all where cf_acctime > to_char(sysdate,'yyyy-MM-dd'))cross join(select count(1) as flowNumMonth from ccform_debit_all where cf_acctime > to_char(sysdate,'yyyy-MM')) cross join (select count(1) as flowNumTotal from ccform_debit_all where cf_acctime > to_char(sysdate,'yyyy'))
  </select>
</mapper>

其中的sql格式化以后

select *
		from (select count(1) as flowNum
			  from ccform_debit_all
			  where cf_acctime >
					to_char(sysdate, 'yyyy-MM-dd'))
				 cross join(select count(1) as flowNumMonth
							from ccform_debit_all
							where cf_acctime
									  > to_char(sysdate, 'yyyy-MM'))
				 cross join (select count(1) as flowNumTotal
							 from ccform_debit_all
							 where cf_acctime
									   > to_char(sysdate, 'yyyy'))

【后话】
大家估计也知道为什么说是半解决了,因为它这个办法还是代码块级或者文件级别,要一个个操作,不是很方便,还是想要一个一劳永逸的。还有语言注入其实是临时的,重启idea就会消失,那就更鸡肋了,而且只能纯sql,对于像我的示例中这样,又包含sql又包括mybatis的语法的,比如<if>这样的到那就隔断了,<if>是不会被视为sql的,那么
要么写一个纯sql要么纯mybatis语法(其实这样还合理一点,但是这接手的二开,原来的就是混杂的),又或者手敲格式可能还更简单。

其实我还试过那个,就是idea 的插件,比如 SQLFormatter 之类的,那个也可以满足要求,但是问题比语言注入还多,缺点全都有而优点可以忽略,还不如打开一个sql控制台复制粘贴,所以还是放弃了。

如果有其他更好的办法,大家可以在评论分享一下,十分欢迎

2023.11.19更

虽然不是什么大问题,但看着膈应,差点就重装idea了,最后挣扎一次,幸好是解决了。

【过程】

  1. 想重装idea(差点,一上来肯定不能那么极端)
  2. (文件 → 管理ide设置 → 还原默认设置)(这时候会提示备份设置,当然也可以自己提前备份(文件 → 管理ide设置 → 导出设置))→ 重启
  3. 再打开项目,配置下jdk和maven,发现此次高亮没任何问题!
  4. 可知,不是代码问题。而就是配置问题,但配置由前面内容可知,都试过了,也不该有任何问题
  5. 尝试插件检查(为什么呢,因为我想起来我idea太重,有搜过相关内容,把idea部分用不上(自认为)的插件禁用了)

【解决】
插件检查不再赘述,总之最后找到了问题,是XpathView + XSLT 这个插件被我禁用所导致的!
idea mybatis格式化,问题记录,mybatis,xml,sql,intellij idea,ide
将其启用,正常了,mybatis xml有了高亮、格式化也正常了、关键字如select、where等也有了提示,表名、字段名也有了提示(需idea配置数据源)
最后,把idea的配置再导入就好了,过程很烦,但此事终告一段落,开心。

放一下图:
idea mybatis格式化,问题记录,mybatis,xml,sql,intellij idea,ide
如果还是不行,建议全部检查一下:

  1. 插件:Database Tools and SQLXpathView + XSLTMyBatisCodeHelperPro 或者MyBatisX
  2. 设置:配置sql方言
  3. 数据源:配置数据库连接,选择架构(使用的数据库)

如果还是不行,也可以像我一样,清空设置,看看是不是idea本来就显示不了。如果是,那可能是idea版本问题了,我的版本是2023.1文章来源地址https://www.toymoban.com/news/detail-758126.html

到了这里,关于【问题记录】IDEA Mybatis *Mapper.xml 中 sql 无提示、无高亮、格式化失效问题 (已解决)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA->EasyCode(mapper.xml) 字段无逗号分割问题

    easycode 安装使用,出现一下问题: 所有字段没有逗号分割。 github查看解决方法如下: 在easycode的设置里找到: 1、Template下的  mapper.xml.vm脚本 2、 Global Config下的 mybatisSupport.vm脚本 然后将这两个脚本里的 $velocityHasNext 替换成 $foreach.hasNext ,然后保存设置。之后新生成的mapper

    2024年04月10日
    浏览(126)
  • idea写sql语句快捷键提醒,mapper注解开发,mybatis

    第一步:注入SQL语言 1.显示上下文操作(没有这个选项的话就选中sql然后直接alt+回车快捷键) 2.注入语言或引用 3.mysql 第二步:配置MySQL数据库连接 1.首先点击侧边的数据库,再点击上面的加号 2.点击数据源,然后找到MySQL并点击 3.配置数据库信息(填写账号密码后点击测试

    2024年01月16日
    浏览(62)
  • sql中的时间范围查询【三种方式】以及Mapper.xml中遇到大于号小于号问题解决方案

    mapper注意事项 字符 转义字符 描述 gt; 大于 = gt;= 大于等于 lt; 小于 = lt;= 小于等于 \\\" quot; 双引号 ’ apos; 单引号 amp; and 遇到问题: 从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获

    2024年02月10日
    浏览(46)
  • IDEA全局设置MyBatis中写SQL语句提示

    第一步:把这两个设置改成MySQL即可:   第二步:找到设置=编辑器=语言注入=店家加号,选择MySQL 

    2024年02月13日
    浏览(47)
  • Mybatis|mapper配置文件xml位置

    在核心配置文件mybatis-config.xml中设置映射文件位置 application.yml文件中添加配置: mybatis案例中和springboot中都是一样的,只要目录名和包名相同 需要在pom.xml中添加如下内容 越努力,越幸运! codefishyyf与你一起努力!

    2024年02月06日
    浏览(72)
  • (MVC)SpringBoot+Mybatis+Mapper.xml

    前言:本篇博客主要对MVC架构、Mybatis工程加深下理解,前面写过一篇博客:SprintBoot+html/css/js+mybatis的demo,里面涉及到了Mybatis的应用,此篇博客主要介绍一种将sql语句写到了配置文件里的方法,即Mybatis里Mapper.xml文件配置,其主要用于定义sql语句和映射关系 目录 MVC架构流程图

    2024年02月13日
    浏览(44)
  • Mybatis mapper.xml 判断条件写法注意

    1.判断String是否为空 if test=\\\"stringParam != null and stringParam != \\\'\\\'\\\"/if 2.判断Integer是否大于0 判断等于  when test=\\\"item.mark == 1\\\"\\\" 3.判断List是否不为空 5.判断字符串是否等于特定字符(比如此处的user)

    2024年02月16日
    浏览(72)
  • 深入实现 MyBatis 底层机制的任务阶段4 - 开发 Mapper 接口和 Mapper.xml

    😀前言 在我们的自定义 MyBatis 底层机制实现过程中,我们已经深入研究了多个任务阶段,包括配置文件的读取、数据库连接的建立、执行器的编写,以及 SqlSession 的封装。每个任务阶段都为我们揭示了 MyBatis 内部工作原理的一部分,为构建完整的底层框架打下了坚实的基础

    2024年02月09日
    浏览(46)
  • MyBatis - DAO 接口(Mapper.xml)支持方法重载吗?

    方法重载(Method Overloading)是指在同一个类中定义多个方法,它们具有相同的方法名但参数列表不同。 在 MyBatis 的 DAO 层接口中, 是允许方法重载的。 在 DAO 层接口中,可以根据不同的需求和条件定义多个方法,提供不同的查询或操作方式。 在 MyBatis 的 XML 映射文件中, 是

    2024年01月17日
    浏览(44)
  • mybatis中的mapper.xml中如何使用in方法

    提示:mapper.xml中如何使用in方法一般都是like或= 提示:使用foreach 注意,传入的参数是List ,如果传入的是array 则需要修改 collection部分定义为 collection=“array” 在MyBatis中使用in参数为集合时,需要使用到foreach标签。 下面详细介绍以下foreach标签的几个参数

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包