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

  在仅使用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>

3个回答

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

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

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

qq_16127313
爱码少年 其实是一个SQL映射文件,只是他可以根据传入的参数生成不同的SQL,或者你用mybatis映射文件的的判断语言也能达到目的。
一年多之前 回复
weixin_36378917
0 errors 0 warnings 回复qq_16127313: 您好,您说的使用${tablename},怎么能解决UserMapper1和UserMapper2均与UserDao接口文件相对应呢?
一年多之前 回复
weixin_36378917
0 errors 0 warnings 回复weixin_37139197: 您好,一开始我的确没有想过使用两个SqlSession对象来解决这个问题。但如果真的没有办法这也不失是一种办法
一年多之前 回复
qq_16127313
爱码少年 那就一个mapper,增加参数,表名作为参数传进去,注意用 ${tablename}
一年多之前 回复
weixin_37139197
阿进的写字台 你这个是要两个 sqlSessionFactory 了吧, 这不是题主想问的
一年多之前 回复
weixin_36378917
0 errors 0 warnings 您所说的定义2个配置文件的意思是定义两个全局配置文件SqlConfig.xml吗?
一年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐