浏览 20469 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-22
selectPageByExample(@Param("example")Example e,@Param("beginLine")Integer beginLine, @Param("endLine")Integer endLine) 这样就需要在mapper.xml中定义该方法接口对应的sql语句 <select id="selectByExample" resultMap="BaseResultMap"> select <if test="distinct"> distinct </if> <include refid="Base_Column_List" /> from client <if test="example!= null"> <include refid="Example_Where_Clause" /> </if> <if test="orderByClause != null"> order by ${orderByClause} </if> limit #{beginLine},#{endLine} </select> 执行过程中,显示在使用example的时候,里面的criteria为null。 具体为: org.mybatis.spring.MyBatisSystemException: SqlSession operation; nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.mapping.SqlMapperException: The expression 'oredCriteria' evaluated to a null value. ### The error may exist in com/alex/server/mapper/ClientMapper.xml ### The error may involve com.alex.server.mapper.ClientMapper.selectPageByExample ### The error occurred while executing a query ### Cause: org.apache.ibatis.mapping.SqlMapperException: The expression 'oredCriteria' evaluated to a null value. 首先多个参数的值已经取到了,可以读取出来。 其中问题主要出现在: <if test="example!= null"> <include refid="Example_Where_Clause" /> </if> 一旦example不为null的时候,就会去调用Example_Where_Clause sql子句。 该子句语法如下: <sql id="Example_Where_Clause"> <where> <foreach collection="oredCriteria" item="criteria" separator="or"> <if test="criteria.valid"> <trim prefix="(" prefixOverrides="and" suffix=")"> <foreach collection="criteria.criteria" item="criterion"> <choose> <when test="criterion.noValue"> and ${criterion.condition} </when> <when test="criterion.singleValue"> and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue"> and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue"> and ${criterion.condition} <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> 大体意思就是根据example的criteria来组装这个where子句,其并未指定应用哪个example,我想是其框架默认使用传进来的example参数。但是当多参数传进来的时候,貌似就取不到example里面的criteria,但是能知道example不是null。这里有点奇怪。 不知道有没有人遇到过这种情况。 求解啊。 当然分页还有很多其他方式,如果哪位大虾有较好的方案,也可以顺便点拨一下。 谢谢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-04-22
补充一点,如果传进去的example参数为null,是可以实现分页的。
所以问题肯定是example上。 简而言之,就是example不为null的时候,在生成where子句的时候,发现里面的criteria为null |
|
返回顶楼 | |
发表时间:2012-12-11
这样改改
<if test="_parameter != null" > <include refid="Example_Where_Clause_ex" /> </if> <sql id="Example_Where_Clause_ex" > <where > <foreach collection="example.oredCriteria" item="criteria" separator="or" > <if test="criteria.valid" > <trim prefix="(" suffix=")" prefixOverrides="and" > <foreach collection="criteria.criteria" item="criterion" > <choose > <when test="criterion.noValue" > and ${criterion.condition} </when> <when test="criterion.singleValue" > and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue" > and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue" > and ${criterion.condition} <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," > #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> <select id="selectByExample" resultMap="BaseResultMap"> select <if test="distinct"> distinct </if> <include refid="Base_Column_List" /> from client <if test="_parameter != null" > <include refid="Example_Where_Clause_ex" /> </if> <if test="orderByClause != null"> order by ${orderByClause} </if> limit #{beginLine},#{endLine} </select> |
|
返回顶楼 | |
发表时间:2012-12-11
<select id="selectByExample" resultMap="BaseResultMap" parameterType="map">
select <if test="distinct"> distinct </if> <include refid="Base_Column_List" /> from client <if test="example!= null"> <include refid="Example_Where_Clause" /> </if> <if test="orderByClause != null"> order by ${orderByClause} </if> limit #{beginLine},#{endLine} </select> |
|
返回顶楼 | |
发表时间:2012-12-11
或者 引用 这个 Update_By_Example_Where_Clause
|
|
返回顶楼 | |
发表时间:2012-12-11
<select id="selectByExample" resultMap="BaseResultMap" parameterType="map">
select <if test="distinct"> distinct </if> <include refid="Base_Column_List" /> from client <if test="_parameter != null" > <include refid="Update_By_Example_Where_Clause" /> </if> <if test="orderByClause != null"> order by ${orderByClause} </if> limit #{beginLine},#{endLine} </select> |
|
返回顶楼 | |