mybatis SQL語句複用

mybatis SQL語句複用

mapper.xml 中共用

mapper.xml 間共用


項目中也許我們會遇到一段sql語句被多個查詢、增加等語句用到的情況,如何去偷懶呢,複用sql無疑是較好的選擇

這裏只提供簡單的示範:


如果只是單表查詢,並且希望共用的sql只會出現在同一個mapper.xml文件中,那麼我們可以直接在

<mapper namespace="XXXXX"></mapper>

中寫下面的業務代碼

<sql id="unitSql">
        a.userId,a.legalCode,legalName,
        bidderCodeType,legalRole,
        licenseNo,DATE_FORMAT(licenseEndDate,"%Y-%m-%d") AS licenseEndDate,
        taxCertNo,DATE_FORMAT(taxCertEndDate,"%Y-%m-%d") AS taxCertEndDate,
        localTaxCertNo,DATE_FORMAT(localTaxCertEndDate,"%Y-%m-%d") AS localTaxCertEndDate,
        organNo,DATE_FORMAT(organCertEndDate,"%Y-%m-%d") AS organCertEndDate,
        legalRepresent,legalType,
        perresentPhone,legalIndustary,creditRate,
        countryRegion,legalUnitAddress,regionCode,registerProvince,
        a.regCapital,a.regCapCurRency,a.regUnit,
        registerCity,registerCounty,basicBank,basicBranchBank,
        basicAccountNo,basicAccountName,legalContact,legalContactPhone,
        legalContactAddress,legalWeb,legalZipCode,legalEmail,
        legalStatus
</sql>

然後引用

 <select id="getTenderAgentById" parameterType="String" resultType="Map">
        select <include refid="unitSql"/>, -- 就是這句話引用 ,refid爲共有sql語句id
        b.auditOpinion,b.createUser,
        b.createTime,
        b.lastUpdateUser,
        b.lastUpdateTime,
        b.disabled,b.infoStatus
        from P_legalUnit a, P_tenderAgent b
        where  b.userId=#{userId} AND a.userId = b.userId AND b.disabled='0'
</select>

如果是連表查詢,那麼我們極有可能會希望有一個sql語句被多個mapper.xml引用的的方法,很簡單。
我們可以新建一個mapper.xml文件(當然,這個mapper.xml要在你的掃描路徑下,本文不贅述)。取名爲common.xml

該文件內容爲

<?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="common">
    <sql id="common.unitSql">
        a.userId,a.legalCode,legalName,
        bidderCodeType,legalRole,
        licenseNo,DATE_FORMAT(licenseEndDate,"%Y-%m-%d") AS licenseEndDate,
        taxCertNo,DATE_FORMAT(taxCertEndDate,"%Y-%m-%d") AS taxCertEndDate,
        localTaxCertNo,DATE_FORMAT(localTaxCertEndDate,"%Y-%m-%d") AS localTaxCertEndDate,
        organNo,DATE_FORMAT(organCertEndDate,"%Y-%m-%d") AS organCertEndDate,
        legalRepresent,legalType,
        perresentPhone,legalIndustary,creditRate,
        countryRegion,legalUnitAddress,regionCode,registerProvince,
        a.regCapital,a.regCapCurRency,a.regUnit,
        registerCity,registerCounty,basicBank,basicBranchBank,
        basicAccountNo,basicAccountName,legalContact,legalContactPhone,
        legalContactAddress,legalWeb,legalZipCode,legalEmail,
        legalStatus
    </sql>
</mappper>

在另一個mapper.xml文件引用

<select id="getTenderAgentById" parameterType="String" resultType="Map">
        select <include refid="common.unitSql"/>, -- 就是這句話引用 ,refid爲共有sql語句id
        b.auditOpinion,b.createUser,
        b.createTime,
        b.lastUpdateUser,
        b.lastUpdateTime,
        b.disabled,b.infoStatus
        from P_legalUnit a, P_tenderAgent b
        where  b.userId=#{userId} AND a.userId = b.userId AND b.disabled='0'
</select>

==注:爲何我的文件名要取爲common.xml並且id也爲common.unitSql呢?這是爲了後期維護方便,如此,可以更容易找到該共有的sql在哪一個文件==

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章