论坛首页 入门技术论坛

iBATIS 3 动态SQL

浏览 3301 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-09-01  

字符串是:<if test="status != null">  
INT 是:<if test="number!= 0">  

 

        WHERE A.NN_ID = B.PARENT_NN_ID   
        AND A.NN_ID = C.NN_ID   
        <if test="id != null">  
            AND A.NN_ID = #{id}   
        </if>  
        <if test="category != null">  
            AND A.CATEGORY = #{category}   
        </if>  
        <if test="status != null">  
            AND A.WF_STATUS = #{status}   
        </if>  
    </select>  

<sql id="dynamicWhere">
  <where>
        <if test="userId != null">
    and user_id = #{userId}
   </if>
        <if test="username != null">
    and username = #{username}
   </if>
        <if test="password != null">
    and password = #{password}
   </if>
        <if test="birthDate != null">
    and birth_date = #{birthDate}
   </if>
        <if test="sex != 0">
    and sex = #{sex}
   </if>
        <if test="age != 0">
    and age = #{age}
   </if>
  </where>
 </sql>

    <select id="findAll" resultMap="SitePartResult2">
  SELECT <include refid="sitePartColumns" />
     <![CDATA[
      FROM tb_site_part_info
     ]]>
 </select>

 

说动态SQL,这是iBATIS最强大的地方,如果熟悉iBATIS 2的话,一眼可以看出没有了<isNotNull>、<isNotEmpty>、<isLessThan>等熟悉的标签,不错,iBATIS使用了类似JSTL的标签<if>、<choose>、<when>、<otherwise>、<foreach>等来代替原来的标签,并且传值方式由#property name#, $property name$变为了#{property name}和${property name},就我个人而言,这些标签感觉没有iBATIS2用上去爽。

  此外根元素<mapper>的属性namespace在iBATIS 3中是required,而不像iBATIS 2中是可选的,可要可不要。

  下面来说说新增元素<association>和<collection>,<association>对应于Java中的Has A模型,也可以理解为数据库中一对一关系,拿上述例子来说,每条消息的概要信息与消息内容是分别存放在两张Table中的,可以通过上述方法一次性将其取出来,而不需要执行多次查询。而<collection>有点类型主从表关系,即one-to-many模型。

  查询标签<select>也有所改变,首先是属性名称,由原来的parameterClass改为了parameterType,resultClass与变为了resultType,此外需要注意的是如果传入的参数类型为复杂对象,如Bean,则需要在参数后面加上jdbcType属性来指定对应数据库表列的类型,如#{userName, jdbcType=VARCHAR},如果传入的是基本类型,像int,long之类的,则不需要指定。

  另外的变化就是执行方法上的变化,使用select, selectOne, selectList等替代了原来的方法,大家可以参考其API,我在些就不多说了。

 

 

   发表时间:2010-09-02  
ibatis3 能不能把map文件放到jar包里面呢?
0 请登录后投票
   发表时间:2010-09-02  
fordybeach 写道
ibatis3 能不能把map文件放到jar包里面呢?


2不就可以了吗?
0 请登录后投票
   发表时间:2010-09-02  
<select id="getTagSitePartList" resultMap="SitePartResult" parameterType="java.util.HashMap">
  SELECT   t1.id_,t1.part_name_ ,
        t1.lower_node_ ,t1.part_parent_id_,t1.show_type_ ,
        t1.sort_value_ ,t1.effective_ ,t1.part_notes_,t1.insert_time_
     from tb_site_part_info t1,tb_site_channels_part_real t2,tb_site_channels_info t3
   where t3.id_=t2.channels_id_ and t2.part_id_=t1.id_
       <if test="@Ognl@isNotEmpty(partName)">
AND t1.part_name_ like '%${partName}%'
</if>
       <if test=" lowerNode !=0">
AND t1.lower_node_ = #{lowerNode}
</if>
       <if test=" partParentId !=0">
AND t1.part_parent_id_ = #{partParentId}
</if>
       <if test=" showType !=0">
AND t1.show_type_ = #{showType}
</if>
       <if test=" effective !=0">
AND t1.effective_ = #{effective}
</if>
       <if test=" channelsId !=0">
AND t2.channels_id_ = #{channelsId}
</if>
<if test="@Ognl@isNotEmpty(sortColumns)">
ORDER BY ${sortColumns}
</if>
       <if test="@Ognl@isNotEmpty(count)">
limit #{count}
</if>
</select>
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics