mybatis写mapper文件注意事项(转)
原文链接:http://wksandy.iteye.com/blog/1443133
xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响
- < <
 - > >
 - & &
 - ' '
 - " "
 
在mapper文件中写sql语句时,为避免不必要的麻烦(如<等),建议使用<![CDATA[ ]]>来标记不应由xml解析器进行解析的文本数据,由<![CDATA[ ]]>包裹的所有的内容都会被解析器忽略 <![CDATA[ sql语句 ]]>
- <select id="getAccountsByBranch" resultType="Account" parameterType="string">
 - <![CDATA[SELECT * FROM t_acctreg_accounts where acctno < #{acctno}]]>
 - </select>
 
将整个sql语句用<![CDATA[ ]]>标记来避免冲突,在一般情况下都是可行的,但是如果这样写
- <select id="getAccountErrorCount" resultType="int" parameterType="map">
 - <![CDATA[
 - select count(*) from t_acctreg_accounterror
 - <where>
 - <if test="enddate != null and enddate != ''">
 - createdate <= #{enddate}
 - </if>
 - <if test="acctno != null and acctno != ''">
 - AND acctno LIKE '%'||#{acctno}||'%'
 - </if>
 - </where>
 - ]]>
 - </select>
 
就会收到错误信息:
org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException: 无效的列类型: 1111 ; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 无效的列类型: 1111; nested exception is java.sql.SQLException: 无效的列类型: 1111
这是由于该sql配置中有动态语句(where,if),where,if 条件不能放在<![CDATA[ ]]>中,否则将导致无法识别动态判断部分,导致整个sql语句非法.应该缩小范围,只对有字符冲突部分进行合法性调整
- <select id="getAccountErrorCount" resultType="int" parameterType="map">
 - select count(*) from t_acctreg_accounterror
 - <where>
 - <if test="enddate != null and enddate != ''">
 - <![CDATA[createdate <= #{enddate}]]>
 - </if>
 - <if test="acctno != null and acctno != ''">
 - <![CDATA[AND acctno LIKE '%'||#{acctno}||'%']]>
 - </if>
 - </where>
 - </select>
 
还有在向oracle插入数据时,mybatis3报Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters,是由于参数出现了null值,对于Mybatis,如果进行操作的时候,没有指定jdbcType类型的参数,mybatis默认jdbcType.OTHER导致,给参数加上jdbcType可解决(注意大小写)
http://code.google.com/p/mybatis/issues/detail?id=224&q=Error%20setting%20null%20parameter&colspec=ID
- <insert id="insertAccountError" statementType="PREPARED"
 - parameterType="AccountError">
 - INSERT INTO t_acctreg_accounterror(createdate,acctno, errorinfo)
 - VALUES(#{createdate,jdbcType=DATE},#{acctno,jdbcType=VARCHAR},#{errorinfo,jdbcType=VARCHAR})
 - </insert>
 
mybatis写mapper文件注意事项(转)的更多相关文章
- mybatis_mybatis写mapper文件注意事项
		
xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响 < < > > & & ' ' " " ...
 - SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」
		
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
 - MyBatis的Mapper文件的foreach标签详解
		
MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...
 - 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象
		
逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...
 - 自动生成Mybatis的Mapper文件
		
自动生成Mybatis的Mapper文件 工作中使用mybatis时我们需要根据数据表字段创建pojo类.mapper文件以及dao类,并且需要配置它们之间的依赖关系,这样的工作很琐碎和重复,myba ...
 - mybatis的mapper文件的大于号特殊符号使用
		
第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DA ...
 - 使用逆向工程生成mybatis的Mapper文件
		
之前有写过一篇博客: 使用MyBatis Generator自动生成MyBatis的代码链接:http://www.cnblogs.com/klslb/p/6908535.html 这个太麻烦了,而且 ...
 - 【坑】解决maven管理SSM中mybatis的mapper文件扫描失败的问题
		
文章目录 前言 改进方式来替换原始的使用方式 后记 好久没有写博客了,11月底来到公司实习,上个月写个小demo,趁此回顾下SSM,今天将最近的积累记录下: 前言 在学习 mybatis 的时候,都知 ...
 - Spring配置扫描mybatis的mapper文件注意:
		
一般会将不业务的mapper文件放到不同的包中: spring配置扫描就需要配置下面的方式(两个*): <!-- mybatis文件配置,扫描所有mapper文件 --> <bean ...
 
随机推荐
- form in drupal
			
qin_form_ajax_example_form($form, &$form_state)类似函数的参数永远都是一样的,最多把$form前面也加上& 当没有实现页面跳转时,$for ...
 - ios AudioQueueStart returns -50 录音失败问题
			
ios AudioQueueStart returns -50 录音失败问题 使用iOS录音时,如果在应用的别处有语音的操作,可能会出现上述问题: 导致录音机打开失败!无法录音,并且 AudioQue ...
 - oneproxy---为实战而生之安装篇
			
OneProxy是一款数据库中间件,与目前市面上的TDDL.MySQL-Proxy属于同类型产品.我们坚持研发OneProxy是基于如下几点考虑: 1. 我们不想被某一种开发语言绑定 ...
 - C/C++中的abort、atexit、exit和_Exit
			
这几个函数都在头文件#include <stdlib.h>中声明.exit._Exit与abort函数使程序终止,控制并不返回到这些函数的调用者. exit()函数 void exit(i ...
 - Jsp-Servlet 那一大堆事儿--1
			
为毛全局变量声明时初始化在try内不能用? import javax.servlet.http .*; import java.io.*; import javax.servlet.*; import ...
 - Mybatis学习(叁)
			
一.resultMap[结果映射 关系映射] 作用:当查询的数据与数据库中的数据不一致(表中字段和实体的属性不一样),通过resultMap进行一次映射. 可以使用简单的做法:(取别名) 二.多表查 ...
 - python 练习 8
			
#!/usr/bin/python # -*- coding: utf-8 -*- def ntom(x,size,mod): t=[0]*(size) j=0 while x and j<si ...
 - python 练习 3
			
#!/usr/bin/python # -*- coding: utf-8 -*- def z94(): #斐波那契数列 def filie(x): a,b,t=1,1,0 if x==1 or x= ...
 - Mybatis 学习-1
			
本次MyBatis基础实例教程主要讲述MyBatis在项目中的配置方法,实体对象的关系映射.关联关系,以及如何实现一个BaseDao的功能 实例数据库的表结构 CREATE TABLE `blog_u ...
 - 学编程,学单词.....在学习中积累自己的单词(不断更新__ing)
			
可以去肆意大话天下,可以去小民一般的言语,但是一定要清楚,知识的积累,至于心中,即便你说这粗俗的话,你的个性,气质依旧在那,比如北大的那啥教师(心中的典范),也只有这样,你才能低至市井,上至高阁... ...