不同类型的null,如何在mybatis中处理它?

时间:2015-07-07 08:17:07

标签: spring oracle null mybatis

我正在做一些基于Freemarker + Spring + MyBatis + Oracle的Web开发。现在我面临一个非常简单但很难的问题,就是如何处理不同类型的'NULL':

例如,一张表存储了许多学生的信息,学生一行包括他的姓名,班级编号和老师(我们假设他只有一位老师)。

NULL 1 :我们想找到三年级的学生,所以我们的查询条件变为{class_number ='3'}。在这种情况下,我们的查询变为:

从student_table中选择s *,其中class_number ='3'

MyBatis配置文件可以是这样的:

<select id="selectStudents" parameterType="map" resultType="map">
       select  * from student_table a where 1=1 
       <if test="class_number!= null">
       and a.CLASS_NUMBER= #{product_name,jdbcType=VARCHAR}
       </if>
      <if test="teacher_name!= null">
       and a.TEACHER_NAME= #{teacher_name,jdbcType=VARCHAR}
       </if>
</select>

是的,这是我们想要的。

NULL 2 :由于历史原因,某些行的teacher_name为空,这意味着该学生的老师不详。我们想找到这些老师未知的学生。显然,xml文件以上不能满足我们的要求。我们应该这样修改:

   <select id="selectStudents" parameterType="map" resultType="map">
           select  * from student_table a where 1=1 
                <choose>
       <when test="class_number!=null &amp;&amp; ques_type!=''">
       and a.CLASS_NUMBER= #{class_number,jdbcType=VARCHAR}
       </when>
       <otherwise>
       and a.CLASS_NUMBER is null
       </otherwise>
       </choose>

   <choose>
       <when test="class_number!=null &amp;&amp; ques_type!=''">
       and a.TEACHER_NAME= #{teacher_name,jdbcType=VARCHAR}
       </when>
       <otherwise>
       and a.TEACHER_NAME is null
       </otherwise>
       </choose>
    </select>

如果我们在单个系统中同时具有两个查询要求,我该怎么办?

0 个答案:

没有答案