mybatis中的两个sql文件的select语句可以互相调用吗
在A.xml定义了一个select语句,id为selectUser。在B.xml定义了另一个select语句,现在想问一下在B.xml中如何调用A.xml定义的id为se...
在A.xml定义了一个select语句,id为selectUser。在B.xml定义了另一个select语句,现在想问一下在B.xml中如何调用A.xml定义的id为selectUser语句?能调用到吗
展开
展开全部
不得不说,不怕你不敢做,只怕你不敢想...看到你的提问后,我测试了一下,答案是:可以的...
以下是案例:
我有两mybatis文件,分别是ClassMapper.xml和BabyMapper.xml中,现在想要用ClassMapper调用BabyMapper中的一个方法。
ClassMapper.xml中的查询语句:
<select id="getByBo" resultMap="BaseResultMap" parameterType="ClassesBo">
select * from class c where 1 = 1
<include refid="baby.getdemo"/>
</select>
BabyMapper.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="baby">
<sql id="getdemo">
and 2 = 2
</sql>
</mapper>
通过log观察发现最后的结果:
Preparing: select * from class c where 1 = 1 and 2 = 2
通过以上,发现是可以跨文件调用的,写的时候需要把指针也写上,如:baby.getdemo
以上只是例子,实际还需要按照你自己来定
以下是案例:
我有两mybatis文件,分别是ClassMapper.xml和BabyMapper.xml中,现在想要用ClassMapper调用BabyMapper中的一个方法。
ClassMapper.xml中的查询语句:
<select id="getByBo" resultMap="BaseResultMap" parameterType="ClassesBo">
select * from class c where 1 = 1
<include refid="baby.getdemo"/>
</select>
BabyMapper.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="baby">
<sql id="getdemo">
and 2 = 2
</sql>
</mapper>
通过log观察发现最后的结果:
Preparing: select * from class c where 1 = 1 and 2 = 2
通过以上,发现是可以跨文件调用的,写的时候需要把指针也写上,如:baby.getdemo
以上只是例子,实际还需要按照你自己来定
追问
非常感谢了,我测试的时候只是把两个不同的SQL映射文件设置具有相同的namespace就可以互相调用了。这样就可以在ResultMap中association和collection的select属性直接调用了。
你这种又是一个补充说明,这种情况我没考虑到,不过也是可以的!
哈哈,重在实践啦
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询