前段时间忙项目,有很多多表联合查询,而其中很多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不用到处去修改