1. 程式人生 > >mybatis面向介面程式設計,namespace屬性的值對應關係

mybatis面向介面程式設計,namespace屬性的值對應關係

背景:在Mybatis的專案中,因為使用傳統的Dao開發方式可以實現所需功能,但是採用這種方式在實現類會出現大量的重複程式碼(缺點一),在方法中也需要指定對映檔案執行語句的id,並且不能保證編寫時id的正確性(在多人開發中還可能出現id重名。已經寫實現類的時候會出現引數錯誤。這是缺點二),因此出現了使用面向介面程式設計的方法。

mybatis中,對映檔案中的namespace是用於繫結Dao介面的,即面向介面程式設計。

當你的namespace繫結介面後,你可以不用寫介面實現類,mybatis會通過該繫結自動

幫你找到對應要執行的SQL語句,如下:

介面

public interface ItemsMapperCustom {
    //商品查詢列表
	public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo)throws Exception;//這是介面的方法!!!!!
}

 對於對映檔案如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

 <mapper namespace="cn.itcast.ssm.mapper.ItemsMapperCustom" ><!--注意看namespace的值,這個是介面的路徑-->

  <!-- 定義商品查詢的片段,商品查詢條件 -->
  <sql id="query_items_where">
  <!-- 使用動態sql,通過if判斷,滿足條件進行sql拼接 -->
       <!-- 商品的查詢條件是通過ItemsQueryVo包裝物件中itemsCustom屬性來傳遞 -->
       <if test="itemsCustom!=null">
          <if test="itemsCustom.name!=null and itemsCustom.name!="""></if>
          items.name LIKE '%${itemsCustom.name}%' 
       </if>
  </sql>
  
  <!-- 商品的列表查詢 -->
  <!-- 建議parameterType要傳入包裝物件 -->
  <!-- resultType建議使用拓展物件 -->
  <select id="findItemsList" parameterType="cn.itcast.ssm.po.ItemsQueryVo"  
   resultType="cn.itcast.ssm.po.ItemsCustom">
       SELECT items.* FROM items
       <where>
           <include refid="query_items_where"></include>
       </where>
        
  </select>
  	
</mapper>

注意介面中的方法與對映檔案中的SQL語句的ID一一對應 。

則在程式碼中可以直接使用面向介面程式設計而不需要再編寫實現類。

實現方法:

@Autowired
    private ItemsMapperCustom itemsMapperCustom;//spring和mybatis的整合包,ItemsMapperCustom已經到了spring容器
    
    @Override
    public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo)
            throws Exception {
        // 通過ItemsMapperCustom來查詢資料庫
        return itemsMapperCustom.findItemsList(itemsQueryVo);//這是執行方法!!!!!!!!!!!!
    }
由於本人用了srping和MyBatis的整合包,少了一些單純使用Mabatis方法的步驟,所以對於只學了MyBatis的人來說有些地方可能有點難理解,但是思路應該是對的,如有錯誤,歡迎斧正,大家一起進步。