MyBatis中mapper的namespace值

1.      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

       alias="Employee"type="com.wildrain.domain.Employee" />

   

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);--entity的类路径名称

           List ems = mapper.getAllEmployees();

           for(Employee e:ems){

              System.out.println(e);

           }

       } finally {

           session.close();

       }

}

 

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

final String getAllEmployees = "SELECTE.id, name, type, salay, time "+

       "FROM employee E "+

       "left join register r onr.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 ,从而不用输入那一行代码。

你可能感兴趣的:(框架理解)