myBatis mapper.xml 文件共用

前段时间忙项目,有很多多表联合查询,而其中很多sql是可以复用的,当时为赶进度都是复制粘贴完事,最近有一个通用很多的sql要求各种额外添加表,导致需要到处修改sql还不知道是否完全修改到,所以就在想是不是可以单独的把所有共用的sql按表,按模块提出成一个单独的mapper其它涉及到的模块直接使用,最后通过自己的测试完整使用,特记录如下,让有需求的人参考。

<?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">

<!-- 以下sql会在当前mapper和其它mapper被多次使用,单独存在此mapper会让人感觉比较乱-->
<mapper
    namespace="com.xsq.test.mapper.CombinatorialnformationMapper">
    <sql id="findNameA">
        SELECT
        ps as   code,
       pn as   name
        FROM
        A
    </sql>

<sql id="findNameB">
        SELECT
        psn as code,
        pn as name
        FROM
        B
    </sql>

<select id="query"
        resultType="com.xsq.test.User">

<include refid="findNameA"></include>

UNION

<include refid="findNameB"></include>

</select>

</mapper>

修改后的mapper如下:

<?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-->
<mapper
    namespace="template">
    <sql id="findNameA">
        SELECT
        ps as   code,
       pn as   name
        FROM
        A
    </sql>

<sql id="findNameB">
        SELECT
        psn as code,
        pn as name
        FROM
        B
    </sql>

</mapper>

<?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="com.xsq.test.mapper.CombinatorialnformationMapper">  

<select id="query"
        resultType="com.xsq.test.User">

<include refid="template.findNameA"></include>

UNION

<include refid="template.findNameB"></include>

</select>

</mapper>

至此,各种SQL的修改只需要在对应文件修改就OK不用到处去修改

 

 


版权声明:本文为xsq315688104原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。