mybatis刚从@Annotation向xml转换时遇到的一些坑

版权声明: https://blog.csdn.net/u011305680/article/details/83957537
  1. 老碰到少了逗号“,”的情况,导致sql出错,但是这类问题又不容易察觉到,幸好如果有异常堆栈打出的话,这类问题还是比较好发现的。比较麻烦的事是在某厂,当时碰到的这个服务本地无法启动,但是本人初来乍到,一是不熟悉整个系统,找不到启动失败原因在哪儿,而且据说这个问题对于团队老人们都比较难解决,项目又忙,暂时只能通过部署在远程服务器上测试了,二是项目工期压力大,deadline近在眼前,没有时间解决本地启动问题,这类xml又无法远程debug的时候进行热部署,所以每次错一次就得花好久部署一次,极大拖慢研发速度,消耗本猿的耐心,可以说本文极大出生的极大原因是因为这个小小的逗号。可以说这个问题当时除了每次写完在提交的时候细细的查一遍更新的SQL有没有少逗号外,无解。(更新:其实可以通过SqlSessionFactory重新加载mapper.xml文件)

  2. <set>的使用错误,在组合使用<set> + <if>的时候,由于语法不熟,项目又忙,没有时间先学习一下mybatis xml的语法,以为用过注解写个xml还是没问题的,所以这个地方在<set>标签里面一些属性正常更新,一些属性需要if判断来更新的时候碰到的坑,还有一个逗号“,”问题,默认<set>标签是会自动去除末尾逗号的,如下:

<update id="update" >
		update
		user
        <set>
                modify_time = now(),		//set标签里面就不用再写set了,需要判断就加if,不需要就直接这么写即可,<set>标签等同于set,一个sql语句只能写一个,所有更新语句全部写在<set>标签里
                modifier = #{modifier},    //这个地方就算下面没有更新项了,逗号也会默认去掉,不会影响,如果没有这个逗号,下面还有条件生效时,两个赋值语句中间就会缺少逗号
            <if test="name != null">
                name=#{name},
            </if>
            <if test="idCard != null">
                id_card=#{idCard},
            </if>
        </set>
		WHERE
		is_deleted = 0
	</update>
  1. 在写大于小于(>, <,>=,<=)符号时,由于这些符号是特殊字符(很明显系统可能会判断错误为xml的标签开头),在解析xml文件时会被转义,为了不让它们被转义,我们用<![CDATA[ 文本内容]]>来包上这部分语句,CDATA 全名:character data,所有 XML 文档中的文本均会被解析器解析,除了 CDATA 区段(CDATA section)中的文本会被解析器忽略。

终其所有,都是因为在开干之前没有好好的研读一下xml的语法,这里后知后觉,并附上一份比较好的xml语法地址:mybatis语法

猜你喜欢

转载自blog.csdn.net/u011305680/article/details/83957537
今日推荐