纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

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

hugh Lee   2021-09-30 我要评论
想了解Mybatis的mapper标签 namespace属性用法说明的相关内容吗hugh Lee在本文为您仔细讲解Mybatis mapper标签namespace属性的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Mybatis标签,mapper标签,namespace属性下面大家一起来学习吧。

Mybatis mapper标签namespace属性说明

在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面向接口编程而不需要再编写实现类。

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从而不用输入那一行代码。

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

Mybatis中namespace的作用

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

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

ItemsCustomMapperxml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.itcast.ssm.mapper.ItemsMapperCustom" >
   <!-- 定义商品查询的sql片段就是商品查询条件 -->
   <sql id="query_items_where">
    <!-- 使用动态sql通过if判断满足条件进行sql拼接 -->
    <!-- 商品查询条件通过ItemsQueryVo包装对象 中itemsCustom属性传递 -->
        <if test="itemsCustom!=null">
            <if test="itemsCustom.name!=null and itemsCustom.name!=''">
                items.name LIKE '%${itemsCustom.name}%'
            </if>
        </if>
   </sql>
    <!-- 商品列表查询 -->
    <!-- parameterType传入包装对象(包装了查询条件)
        resultType建议使用扩展对象
     -->
    <select id="findItemsList" parameterType="cn.itcast.ssm.po.ItemsQueryVo"
         resultType="cn.itcast.ssm.po.ItemsCustom">
        SELECT items.* FROM items  
        <where>
            <include refid="query_items_where"></include>
        </where>
    </select>
</mapper>

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


相关文章

猜您喜欢

  • vue对比两组数据差异 利用vue对比两组数据差异的可视化组件详解

    想了解利用vue对比两组数据差异的可视化组件详解的相关内容吗小周小周万事无忧在本文为您仔细讲解vue对比两组数据差异的相关知识和一些Code实例欢迎阅读和指正我们先划重点:vue对比数据,vue可视化组件,vue可视化下面大家一起来学习吧。..
  • pandas创建DataFrame pandas创建DataFrame的方式小结

    想了解pandas创建DataFrame的方式小结的相关内容吗Eternal1690在本文为您仔细讲解pandas创建DataFrame的相关知识和一些Code实例欢迎阅读和指正我们先划重点:pandas创建DataFrame下面大家一起来学习吧。..

网友评论

Copyright 2020 www.Shellfishsoft.com 【贝软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式