在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。
当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句,如下:
假设定义了IArticeDAO接口
public interface IArticleDAO
{
List<Article> selectAllArticle();
}
对于映射文件如下:
<mapper namespace="IArticleDAO">
<select id="selectAllArticle" resultType="article">
SELECT t.* FROM T_article t WHERE t.flag = '1' ORDER BY t.createtime DESC
</select>
请注意接口中的方法与映射文件中的SQL语句的ID一一对应 。
则在代码中可以直接使用IArticeDAO面向接口编程而不需要再编写实现类。
1. MyBatis的命名空间(我们以下图的文件结构来说明)
MyBatis的命名空间说的是POJO的XXx.xml文件中的<mapper namespace=”” />,主要是跟三个地方有关系,
第一个是Configuration.xml的mappers属性
第二个是POJO的mapper接口如EmployeeMapper的类路径
第三个是DAO程序中的session.getConfiguration().addMapper(EmployeeMapper.class)
下面我来说一下他们三个之间的关系,我们
1)当只使用XML(不使用Anotation)的来配置mapper接口时,就是我们把sql配置在EmployeeMap.xml中时,若我们把namespace指明namespace设置为mapper接口的路径,即<mapper namespace="com.wildrain.mapper.EmployeeMapper">时,这样我们在程序中使用MyBatis来进行CRUD时, session.getConfiguration().addMapper(EmployeeMapper.class)这段代码可以不用写。我们来具体看一下这个三个地方的代码形式。
Configuration.xml的mappers
<typeAliases>
<typeAlias alias="Employee" type="com.wildrain.domain.Employee" />
</typeAliases>
Namespace
<mapper namespace="com.wildrain.mapper.EmployeeMapper">
程序代码:
@Test
public void testGetAllEmployees(){
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
List<Employee> 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<Employee> 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中就不需要设置<mappers/>了,此时在测试程序时就必须加一行session.getConfiguration().addMapper(EmployeeMapper.class);的代码进行注册,这样在每一次CRUD时都需要添加一行这样的代码。还不如在建立一个空的Employee.xml文件,然后像上面一样设置好namespace,从而不用输入那一行代码。
相关知识
MyBatis缓存
记住!spring配置文件中的 configLocation' value= 记得带上,指定到mybatis的配置文件
Mybatis 菜鸟教程
初学javaweb+mybatis练习宠物管理系统小项目
基于javaweb+jsp的宠物领养信息管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
基于javaweb+jsp的宠物领养信息管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)
基于springboot的学生在线训练考试系统设计与实现(源码+lw+部署文档+讲解等)
基于Python+django的宠物服务管理系统网站(源码+lw+部署文档+讲解等)(源码+lw+部署文档+讲解等)
eBay产品添加这两种属性标签,可大大提高刊登曝光量
基于SSM的宠物领养系统设计
网址: 【namespace】——Mybatis的mapper标签属性说明 https://m.mcbbbk.com/newsview759413.html
上一篇: Fielddata is dis |
下一篇: 【c语言】(函数)计算阶乘和数, |