Mybatis的mapper标签 namespace属性用法说明

Mybatis mapper标签namespace属性说明

在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。

当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句,如下:

假设定义了IArticeDAO接口

public interface IArticleDAO
{
   List
selectAllArticle(); }

对于映射文件如下:


    

请注意接口中的方法与映射文件中的SQL语句的ID一一对应 。

则在代码中可以直接使用IArticeDAO面向接口编程而不需要再编写实现类。

MyBatis的命名空间(我们以下图的文件结构来说明)

Mybatis的mapper标签 namespace属性用法说明_第1张图片

MyBatis的命名空间说的是POJO的XXx.xml文件中的,主要是跟三个地方有关系,

  • 第一个是Configuration.xml的mappers属性
  • 第二个是POJO的mapper接口如EmployeeMapper的类路径
  • 第三个是DAO程序中的session.getConfiguration().addMapper(EmployeeMapper.class)

下面我来说一下他们三个之间的关系,我们

1)当只使用XML(不使用Anotation)的来配置mapper接口时

就是我们把sql配置在EmployeeMap.xml中时,若我们把namespace指明namespace设置为mapper接口的路径,即时,这样我们在程序中使用MyBatis来进行CRUD时, session.getConfiguration().addMapper(EmployeeMapper.class)这段代码可以不用写。我们来具体看一下这个三个地方的代码形式。

Configuration.xml的mappers

       
    
Namespace

程序代码:

    @Test
    public void testGetAllEmployees(){
       SqlSessionFactory sqlSessionFactory =  MyBatisUtil.getSessionFactory();
       SqlSession session = sqlSessionFactory.openSession();
       try {
           EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
           List ems = mapper.getAllEmployees();
           for(Employee e:ems){
              System.out.println(e);
           }
       } finally {
           session.close();
       }
}

若我们在employee.xml中的namespace是任意取的名字,而不是EmployeeMapper.java的类路径名,那么当我们在进行测试时,必须要添加一行代码session.getConfiguration().addMapper(EmployeeMapper.class)进行注册,下代码如下:

@Test
    public void testGetAllEmployees(){
       SqlSessionFactory sqlSessionFactory =  MyBatisUtil.getSessionFactory();
       SqlSession session = sqlSessionFactory.openSession();
       session.getConfiguration().addMapper(EmployeeMapper.class);
       try {
           EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
           List ems = mapper.getAllEmployees();
           for(Employee e:ems){
              System.out.println(e);
           }
       } finally {
           session.close();
       }
}

2)当使用注解时

为了减少配制xml的工作量,可以把Employee.xml省略,而把相应配制通过注解的形式写到EmployeeMapper.java的文件中,如下所示

final String getAllEmployees = "SELECT E.id, name, type, salay, time "+
       "FROM employee E "+
       "left join register r on r.eid = E.id "+
    "left join time t on t.eid = E.id";
@Select(getAllEmployees)
    @TypeDiscriminator(column = "type",
           cases={   
           @Case(value="1",type=RegisterEmployee.class,results={
              @Result(property="salay")
           }) ,
           @Case(value="2",type=TimeEmployee.class,results={
              @Result(property="time")
           })
})

这样Configuration.xml中就不需要设置了,此时在测试程序时就必须加一行

session.getConfiguration().addMapper(EmployeeMapper.class);

的代码进行注册,这样在每一次CRUD时都需要添加一行这样的代码。

还不如在建立一个空的Employee.xml文件,然后像上面一样设置好namespace,从而不用输入那一行代码。

上面的说明针对的是,仅针对使用mybats动态代理时的情况。写得比较乱,以后有时间再改。

Mybatis中namespace的作用

在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。

当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动 帮你找到对应要执行的SQL语句

ItemsCustomMapperxml:




   
   
    
    
        
            
                items.name LIKE '%${itemsCustom.name}%'
            
        
   
    
    
    

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的:(Mybatis的mapper标签 namespace属性用法说明)