mybatis:使用带有XML配置的mapper接口来获取全局参数

时间:2010-11-24 07:45:12

标签: java orm ibatis mybatis

我喜欢XML表示法来指定全局参数,例如连接字符串。我也喜欢Mapper注释。当我尝试将两者合并时,我得到this exception

有没有办法将两者结合起来?我想使用XML文件进行全局配置,但mybatis会考虑Mapper接口。

问题是SqlSessionFactoryBuilder()。build()需要一个Reader(我想用它来传递XML配置),或者一个Configuration对象(我​​看到它有addMappers()方法可以帮助我) - 但我不明白如何将两者结合起来。

3 个答案:

答案 0 :(得分:9)

factory.getConfiguration().addMapper(...);

答案 1 :(得分:6)

当您使用具有精确方法签名的抽象方法创建映射器接口作为xml中的sql时。

例如。这是包含实际查询的dao.xml的命名空间。

<mapper namespace=" com.mybatis.dao.EntityMapperInterface">
    <select id="selectEmployeeWithId" parameterType="Long"
        resultType="com.mybatis.domain.Employee">
        select id,name from employee where 1=1
        <if test="_parameter != null"> 
            AND id=#{id} 
        </if>
        order by id
    </select>

它将映射到界面com.mybatis.dao.EntityMapperInterface

public interface EntityMapperInterface {
    public List<Employee> selectEmployeeWithId(Long id);

Mybatis-config文件

<mappers>
    <mapper resource="com/mybatis/mappers/EntityMapper.xml" />
</mappers>

你如何从Action类/ Servlet中调用它? 当你初始化SqlSession时,

EntityMapperInterface emi = session.getMapper(EntityMapperInterface.class);
List eList = emi.selectEmployeeWithId(1);

答案 2 :(得分:0)

我遇到了同样的问题,因为mybatis映射器文件中的名称空间与mapper接口的包不匹配。