mybatis学习记录(三)-----关于SQL Mapper的namespace

关于SQL Mapper的namespace

        视频总结笔记:

mybatis学习记录(三)-----关于SQL Mapper的namespace_第1张图片

在SQL Mapper配置文件中标签的namespace属性可以翻译为命名空间,这个命名空间主要是为了防止SQL id 冲突的。
创建CarMapper2.xml文件,代码如下:

                CarMapper2.xml:





    

不难看出,CarMapper.xml和CarMapper2.xml文件中都有 id="selectCarAll"
将CarMapper2.xml配置到mybatis-config.xml文件中。

        mybatis-config.xml:


  
  

编写Java代码如下:
        CarMapperTest.testNamespace:

@Test
public void testNamespace(){
    // 获取SqlSession对象
    SqlSession sqlSession = SqlSessionUtil.openSession();
    // 执行SQL语句
    List cars = sqlSession.selectList("selectCarAll");
    // 输出结果
    cars.forEach(car -> System.out.println(car));
}

运行结果如下:

                异常信息:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.IllegalArgumentException: 
  selectCarAll is ambiguous in Mapped Statements collection (try using the full name including the namespace, or rename one of the entries) 
  【翻译】selectCarAll在Mapped Statements集合中不明确(请尝试使用包含名称空间的全名,或重命名其中一个条目)
  【大致意思是】selectCarAll重名了,你要么在selectCarAll前添加一个名称空间,要有你改个其它名字。

ava代码修改如下:

        CarMapperTest.testNamespace:

@Test
public void testNamespace(){
    // 获取SqlSession对象
    SqlSession sqlSession = SqlSessionUtil.openSession();
    // 执行SQL语句
    //List cars = sqlSession.selectList("car.selectCarAll");
    List cars = sqlSession.selectList("car2.selectCarAll");
    // 输出结果
    cars.forEach(car -> System.out.println(car));
}

       运行结果如下:

mybatis学习记录(三)-----关于SQL Mapper的namespace_第2张图片

你可能感兴趣的:(Java知识学习,数据库学习记录,mybatis学习记录,mybatis,学习,sql)