日期:2014-05-16  浏览次数:20962 次

ibatis中输入/输出各种类型的参数分析及#与$区别
ibatis中输入/输出各种类型的参数分析及#与$区别 (转)
(1)
在数据库持久层的框架中,大家一定听过Hibernate的大名了吧,经典的SSH框架就有它的一份哦!可是我今天要说的却是另外一个持久层的框架,它就是iBatis。与Hibrenate相比,它的主要优势就是简单、小巧、轻量级,但是它的功能却丝毫不亚于 Hibernate,下面让我们来看看iBatis在项目中的应用吧!
iBatis确实很简单,它的工作原理就是通过SQL Map映射文件将sql语句和java对象对应起来(如:在利用对象属性的getter从属性中获取值,查询结果后,将各值用setter方法放到对象中).在iBatis中,sql语句是我们手工编写好的,这一点与Hibernate不同,Hibernate是通过映射java对象和数据库表字段来自动生成的sql语句。

(2)
ibatis中的namespace与resultMap
<sqlMap namespace="admin">在运用时如下:
this.getSqlMapClient().update(“admin.update”, entity);

分析:
ibatis 配置文件中的useStatementNamespaces:是否使用Statement命名空间。这里的命名空间指的是映射文件中,sqlMap节点的 namespace属性,如:<sqlMap namespace="User">。这里,指定了此sqlMap节点下定义的操作均从属于"User"命名空间。
在 useStatementNamespaces="true"的情况下,Statement调用需追加命名空间,如:sqlMap.update("User.updateUser",user);否则直接通过Statement名称调用即可,如:sqlMap.update("updateUser",user);
好处:
在实际应用中,利用namespace可以防止两个同名的方法而引起冲突。如有两个updateUser,可以通过A updateUser/B. updateUser来区分。
另一种方法:
但有一种更方便的方法,可以在不采用namspace的情况下,解决上面的问题:即直接在方法的前面直接命名为A updateUser/B. updateUser。调用时,直接调用A updateUser/B. updateUser即可。如下:
<sqlMap>
       <typeAlias type="com.admin.entity.Admin" alias="Admin" />

       <select id="Admin.findUserByLoginName" parameterClass="java.lang.String"
              resultMap="AdminResult">
              select * from T_ADMINISTRATORS where longinName = #value#
              and status != 4
       </select>
调用时,getSqlMapClientTemplate.queryForList(“Admin.findUserByLoginName”,”test”);即可。

请注意:
此时需要保证所有映射文件中,Statement定义无重名。

第二:
resultMap:结果映射,需结合resultMap节点对映射关系加以定义。
<sqlMap>
       <typeAlias type="com.admin.entity.Admin" alias="Admin" />
       <resultMap id="AdminResult" class="Admin">
              <result column="staff_id" property="id" />
              <result column="loginName" property="loginName" />
              <result column="password" property="password" />
              <result column="staff_name" property="username" />
              <result column="status" property="status" />
              <result column="phone" property="phone" />
              <result column="email" property="email" />
       </resultMap>

       <select id="Admin.findUserByLoginName" parameterClass="java.lang.String"
              resultMap="AdminResult">
              select * from T_ADMINISTRATORS where longinName = #value#
              and status != 4
       </select>
</sqlMap>

(3)关于ibatis中输入/输出各种类型的参数分析
在ibatis,输入的参数对象常以parameterClass来定义,输出的结果集常以resultMap来定义。(resultMap: 方便JAVABEAN属性及字段的映射,调用JAVABEAN的setter进行设置值。通常我们不采用resultClass属性进行映射,因为它不具备映