`
WKsandy
  • 浏览: 149407 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

mybatis写mapper文件注意事项

    博客分类:
  • java
阅读更多

xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响

&lt; < 
&gt; > 
&amp; & 
&apos; ' 
&quot; "
 

 

在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>
 

 

分享到:
评论
7 楼 atgoingguoat 2014-09-28  
mybatis 应该改这个BUg
6 楼 DXL_xiaoli 2014-06-16  
thank you  解决我的大问题,我部分加了 一部分没加,害我接口总报错。
5 楼 yumyy 2013-10-11  
哎,纠结了我半天的问题,终于解决了。
4 楼 jaejoong 2013-04-11  
今天搞了小半天,没知道错误在哪,真是谢谢了
3 楼 zhulongxing_sz 2012-08-21  
我加了好多的 <if> 标签来防止 null 的情况···
2 楼 zhulongxing_sz 2012-08-21  
早一点看到你的文章就好了···我走弯路了···
1 楼 yesterdayman 2012-05-25  
very good!!! 

相关推荐

    自动生成mybatis的mapper文件和bean

    通过掌握以上知识点,我们可以高效地利用MyBatis的代码生成器,实现Mapper文件和Bean的自动化生成,从而提升开发效率,减少重复劳动。在实际开发中,合理运用这样的工具是提升团队协作效率的关键。

    mybatis-通用Mapper-逆向工程-代码生成工具

    6. **注意事项**: - 在使用通用Mapper时,需要注意数据库字段与Java属性的映射关系,确保命名规则的一致性。 - 对于复杂的SQL操作,如关联查询、子查询,可能需要自定义XML配置或使用注解进行扩展。 - 时刻关注...

    本地自动生成MyBatis映射类实体类

    8. **注意事项**:自动生成的代码可能需要根据业务需求进行调整,例如添加自定义的注解、添加验证逻辑等。同时,保持与数据库同步更新是必要的,当数据库表结构改变时,应及时更新相应的映射类和实体类。 通过理解...

    Mybatis-generator 生成Mybatis配置文件

    5. **注意事项** - 在运行前,确保数据库连接信息的正确性,以及相关库的版本兼容性。 - 谨慎处理-overwrite参数,以免不小心覆盖了已经修改过的代码。 - 配置文件中的标签应正确配置,避免生成不必要的或错误的...

    mybatis 逆向生成工具

    7. **注意事项** - 数据库权限:确保拥有足够的权限来读取数据库表结构。 - 版本兼容性:确认工具版本与MyBatis框架版本及数据库驱动版本的兼容性。 - 定制化需求:虽然工具能自动生成基础代码,但特定业务逻辑仍...

    maven生成mybatis映射文件

    四、注意事项 1. 确保数据库连接信息正确。 2. 根据实际项目需求,调整MBG配置文件中的生成策略。 3. 为了避免覆盖已有文件,可以设置`&lt;overwrite&gt;`为`false`,新生成的文件将不会替换已存在的文件。 4. 为了保持...

    boot-mybatis-tk:Spring Boot整合Mybatis 通用mapper

    8. **注意事项**:在实际应用中,需确保数据库连接配置正确,Mapper接口与XML文件中的namespace匹配,以及实体类的属性与数据库字段对应。此外,通用Mapper虽然简化了许多操作,但在特殊场景下可能需要自定义SQL,...

    mybatis反向工程文件

    5. **注意事项**: - 配置文件中的数据库URL应根据实际环境修改。 - 在生成的代码中,Mybatis通常会为每个字段生成getter和setter方法,以及一个空构造函数和全参构造函数,确保实体类能正确映射到数据库记录。 -...

    Mybatis_dtd文件.zip

    6. **使用 Mybatis 的注意事项** - 保持映射器文件和主配置文件的正确引用。 - 注意 XML 格式的正确性,遵循 DTD 定义的规则。 - 谨慎处理 SQL 注入,避免在动态 SQL 中直接使用用户输入的数据。 - 定期更新 ...

    mybatis-spring整合jar包

    5. 注意事项: - 避免直接在Service层中使用SqlSession,应依赖注入Mapper接口,由MyBatis-Spring管理SqlSession生命周期。 - 确保配置的Mapper接口和XML配置文件匹配,否则可能导致无法找到映射的方法。 - 在多...

    Mybatis排序无效问题解决.doc

    #### 注意事项 虽然使用`${}`可以解决排序无效的问题,但需要注意的是,这种方式也存在一定的安全隐患。因为`${}`直接将参数值插入到SQL语句中,如果没有对参数值进行适当的校验和过滤,则可能会导致SQL注入攻击的...

    SpringBoot整合Mybatis注意事项.doc

    在整合SpringBoot和Mybatis的过程中,需要注意以下几个关键点,这些步骤将确保Mybatis能正确地与SpringBoot框架集成,提供数据库操作的能力。 1. **引入Mybatis相关依赖**: 在`pom.xml`文件中,你需要添加Mybatis...

    生成entity和mybatis映射文件

    8. **注意事项**: 虽然自动生成的代码能节省时间,但有时可能需要对生成的代码进行调整,以适应特定的业务需求或优化性能。例如,可能需要定制复杂的SQL查询,或者添加自定义的逻辑处理。 总的来说,"生成entity和...

    mybatis-plus反向工程 自动生成3层架构的文件controller,service,dao,mapper.zip

    从文件名称列表中,我们可以看出一些具体的操作指南和注意事项: - "(八)SpringBoot使用mybatis-plus+自动代码生成":这可能是一个教程,讲述了如何在SpringBoot项目中集成MyBatis-Plus并使用其代码生成功能。 - ...

    mybatis生成对应的dao/model/mapper

    七、注意事项 - 配置文件中需要正确指定数据库URL、用户名、密码,以及驱动类。 - 需要在配置文件中指定要生成代码的表名和表前缀(如果有的话)。 - 可以通过配置文件控制是否生成通用的 CRUD 方法,以及生成的实体...

    MyBatis自动生成配置文件全解.zip

    总结来说,“MyBatis自动生成配置文件全解.zip”可能包含了MBG的配置示例、使用教程、注意事项等内容,帮助开发者更好地理解和使用MyBatis的自动代码生成功能,提升开发效率,降低出错概率。如果你在实际开发中遇到...

    spring-boot-mybatis多数据源读写分离实例

    8. **注意事项**:在实现读写分离时,需要注意数据一致性问题,比如分布式事务的处理。此外,还需要考虑监控和维护多个数据源的复杂性,以及在系统扩展时的数据源扩展策略。 9. **最佳实践**:为了最大化性能提升,...

    ibatis2mybatis-master.zip

    3. **文档**:详细说明如何使用转换工具,以及转换前后代码的对比和注意事项。 4. **测试用例**:确保转换后的MyBatis代码能够正常运行的测试代码。 总的来说,这个工具为开发者提供了一个便捷的途径,帮助他们从...

    mybatis 自动生成实体类dao

    下面将详细介绍MyBatis Generator的功能、使用方法及注意事项。 一、MyBatis Generator概述 MyBatis Generator通过读取数据库元数据,自动生成对应的Java实体类、Mapper接口以及XML映射文件。这些生成的代码遵循...

    mybatis逆向工程

    五、注意事项 1. 数据库访问权限:确保MBG有足够的权限读取数据库中的表信息。 2. 配置文件的准确性:正确配置数据库连接信息和生成路径,避免因配置错误导致的失败。 3. 版本兼容性:检查MBG版本与MyBatis版本的...

Global site tag (gtag.js) - Google Analytics