1. MyBatis中sql语句的空值处理,需要指定JdbcType
-
说明: 在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型。而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换错误,从而报错。
-
解决方法
select *
from student
where name = #{name,jdbcType=VARCHAR}
2.Mybatis动态查询时,出现传入有值,数据库有值,SQL语句正确,数据查不出来的现象
- 说明:Mybatis处理查询参数时有一个默认的处理规则,造成动态查询时,传入有值,数据库有值,SQL语句正确,数据查不出来的现象
- 解决:
- 1、此时需要明确指出查询参数是什么,在mapper接口层,通过@param()就可以实现
- 2、如果SQL语句中存在连接查询,看看条件是否正确,是否满足,若有一个条件不满足而导致这个数据表连接不到,产生null,则返回的结果也有可能为null
例子:
mapper.xml中的代码
<select id="queryByField" resultType="List" parameterType="String">
SELECT
<include refid="Base_Column_List" />
FROM wady_admin_user_role
WHERE id = #{id}
</select>
对应的mapper接口中的代码
List<Student> queryByField(@param("id") Long id);