在编写SqlMaps的时候,经常需要把一个sql拆分成多个片段。IBatis提供了一个简单有很实用的分割节点来进行SQL的分割。举个简单的例子,假设需要查询一些学生的信息。

    原来的写法是:

<!--查询所有信息-->
<select id="SelectAllCraft" resultMap="StudentMap">
      SELECT
      Id,
      Name,
      Age,
      Address,
      ClassID from Student
 </select>

<!--根据学生编号查询信息-->
<select id="SelectAllCraft" resultMap="StudentMap" parameterClass="Int">>
      SELECT
      Id,
      Name,
      Age,
      Address,
      ClassID from Student
      Where Id=#Value#
 </select>

现在用sql标签可以这样写:

<sql id ="selectAll">
     select Id,
      Name,
      Age,
      Address,
      ClassID,ClassName
      from Student
    </sql>
<!--查询所有信息-->
<select id="SelectAllCraft" resultMap="StudentMap">
    <include refid ="SelectALL"/>
</select>
<!--根据编号查询信息-->
<select id="SelectAllCraft" resultMap="StudentMap" parameterClass="Int">
    <include refid ="SelectALL"/>
    where id=#Value#
</select>

<include refid ="SelectALL"/> refid:就是指要调用sql标签的id。

sql标签就相当于C#里的定义一个字符串,里面存着一些值,可以被其他标签调用。这样一来就可以减少重复代码的书写。

IBatis动态拼接sql

实例:

<!--动态加载sql语句-->
    <select id ="SelectByWhere" resultMap="StudentMap" resultClass="Hashtable">
      <include refid ="SelectALL"/>
      <include refid="s"></include>
      <dynamic prepend="where">
        <isParameterPresent>
          <isNotEmpty prepend="and" property="Name">
            Name like '%$Name$%'
          </isNotEmpty>
          <isNotEmpty prepend="and" property="Address">
            Address like '%$Address$%'
          </isNotEmpty>
          <isGreaterThan prepend="and" property="ClassID" compareValue="0">
            <!--大于-->
            ClassID=#ClassID#
          </isGreaterThan>
          <isNotEqual prepend="and" property="Age" compareValue="0">
            <!--不等于-->
            Age=#Age#
          </isNotEqual>
        </isParameterPresent>
      </dynamic>
      order by Id $Orderby$ 
    </select>
View Code

相关文章:

  • 2021-06-09
  • 2022-12-23
  • 2021-10-12
  • 2022-01-14
  • 2022-02-13
  • 2021-09-11
  • 2021-05-28
猜你喜欢
  • 2021-07-02
  • 2022-12-23
  • 2021-11-14
  • 2022-02-03
  • 2022-12-23
  • 2021-11-19
相关资源
相似解决方案