MyBatis中一个Dao接口文件如何对应多个SQL映射文件(Mapper)

  在仅使用MyBatis框架的基础上(不与Spring等进行整合),我的项目中有一个接口UserDao,具体接口代码如下:

  当采用Mapper动态代理时,一般是创建一个SQL映射文件UserMapper.xml,然后将该SQL映射文件的mapper标签中的namespace设为该UserDao接口的类名,以此来实现Mapper动态代理。

  最后在测试方法中通过SqlSession类实例对象sqlSession的getMapper(UserDao.class)方法获取该接口实现类,并调用接口中的方法完成对数据表的操作。

  那么,现在我的问题是,如果现在想要两个SQL映射文件UserMapper1和UserMapper2均与UserDao接口文件相对应,该如何实现呢?

  本人Java新手,请各位大佬不吝赐教,小弟定当感激不尽。

  UserDao接口代码

package com.ccff.mybatis.dao;

import com.ccff.mybatis.model.User;

import java.util.List;

public interface IUserDao {

    //查询所有用户,以List形式返回
    public List<User> findAllUserToList();
}

  UserMapper映射文件代码

<?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.ccff.mybatis.dao.IUserDao">

    <select id="findAllUserToList" resultType="User">
        select * from user
    </select>

</mapper>

根据我阅读源码的情况, 答案是应该不可以。。一个namespace对应一个mapper.xml文件, namespace不可以重复。

还有, 你为什么想这么做?

完全可以,将该接口的2个映射文件放到不同的目录中,定义2个配置文件分别扫描这2个目录,测试的时候写2个测试类,分别引入这2个配置文件。此做法类似于@Autowired bytype 注入。

很迷。。。为什么要同时操作两个,如果是查询的话可以用关联查询