天天看點

MyBatis DAO層傳遞參數到mapping.xml

總結我所用到的MyBatis,Dao層傳遞參數到mapping.xml檔案的幾種方式:

第一種:傳遞單個參數

Dao層Code片段:

/**
	 * 根據articleId查詢XXXX詳情.
	 * 
	 * @param articleId
	 * @return {@link CmsProductArticle}
	 */
	public CmsProductArticle getCmsProductArticleByArticleId(Long articleId);
           

Mapping片段:

<select id="getCmsProductArticleByArticleId" parameterType="Long" resultType="xxx.xxxxx.xxx.xxxxx.xxx.CmsProductArticle">
        SELECT 
            *
        FROM 
             tableA a, tableB b
        WHERE 
             a.article_id = b.article_id
         and a.del_flag != 2    
         and b.article_id = #{articleId}  
    </select>
           

傳遞單個參數時直接将parameterType設定成你傳入的參數類型(Long),直接用“#{}”獲得參數,參數名必須與Dao層參數名一緻。

resultType是SQL查詢結果傳回的類型,Dao層接口傳回是實體類,是以這裡的resultType是實體類的路徑(按住ctrl鍵,滑鼠點選路徑時可以直接進入實體類時路徑正确)

第二種:傳遞多個參數

1,以注解标記

Dao層Code片段:

/**
	 * 查詢companyId是否存在.
	 * 
	 * @param companyId
	 * @param imgId
	 * @return int
	 */
	public int queryCompanyIdAndImgIdIsExist(@Param("companyid") Long companyId, @Param("id") Long imgId);
           

Mapping片段:

<select id="queryCompanyIdAndImgIdIsExist" resultType="Integer">
        select 
            count(1)
         from table_img img
        where img.company_id = #{companyid}
          and img.id = #{id}
    </select>
           

此時不需要寫 parameterType,但是注意“#{}”内的參數名必須跟你在Dao層中注解@Param("")内定義的名稱一緻。

2,直接傳遞參數

Dao層Code片段:

/**
	 * 查詢companyId是否存在.
	 * 
	 * @param companyId
	 * @param imgId
	 * @return int
	 */
	public int queryCompanyIdAndImgIdIsExist( Long companyId,  Long imgId);
           

Mapping片段:

<select id="queryCompanyIdAndImgIdIsExist" resultType="Integer">
        select 
            count(1)
         from table_img img
        where img.company_id = #{0}
          and img.id = #{1}
    </select>
           

#{0}與#{1}是你在Dao裡的參數順序

3,以Map傳遞參數

實作類Code片段:

Map<String,Object> searchCondition = new HashMap<>();
       searchCondition.put("categoryId", categoryId);
       searchCondition.put("status", status);
       List<CmsProductArticle> cmsProductArticles = cmsProdcutArticleDao.getCmsProductArticles(searchCondition);
           

Dao層Code片段:

/**
	 * 根據搜尋條件查詢産品模闆集.
	 * 
	 * @param searchCondition
	 * @return List<CmsProductArticle>
	 */
	public List<CmsProductArticle> getCmsProductArticles(Map<String, Object> searchCondition);
           

Mapping片段:

<select id="getCmsProductArticles" parameterType="java.util.Map" resultType="xxx.xxxxxxx.xxx.xxxxx.xxxxxxx.CmsProductArticle">
        SELECT 
            *
        FROM 
             table a, table b
        WHERE 
             a.article_id = b.article_id
         and a.del_flag != 2 
         <if test="categoryId != null">
                 and a.category_id = #{categoryId}
         </if>
         <if test="status != null">
                 and a.status = #{status}
         </if>
        </select>
           

# { categoryId}、#{status}對應你在Map裡面的Key

第三種:以實體類傳遞

Dao層Code片段:

/**
	 * 更新.
	 * 
	 * @param cmsProductArticle
	 * @return 
	 */
	public void updateCmsProductArticle(CmsProductArticle cmsProductArticle);
           

Mapping片段:

<update id="updateCmsProductArticleBase" parameterType="xxx.xxxxxxx.xxx.xxxxx.xxxxxxx.CmsProductArticle">
        UPDATE table 
        SET 
            category_id = #{categoryId}, supply_type = #{supplyType}, pay_type = #{payType}, pay_value = #{payValue}, status = #{status}
        WHERE 
              article_id = #{articleId}
          and del_flag != 2
    </update>
           

#{categoryId}等對應實體類中屬性。

繼續閱讀