1. MyBatis的命名空间(我们以下图的文件结构来说明)
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接口的路径,即
Configuration.xml的mappers
Namespace
程序代码:
@Test
public void testGetAllEmployees(){
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
List
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
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 中就不需要设置