mybatis可以生成不重复的id吗_Mybatis的Xml映射文件中,不同Xml映射文件,id是否可以重复详解...

Mybatis的Xml映射文件中,不同Xml映射文件,id是否可以重复?

不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复.

(不管是什么id,即使不是同种类型,譬如说查询的id跟更新的id不一样也不行.反正就是所有id都不能重复,因为id就是一个标识)

个人批注:问题的意思应该是在不使用mapper接口编程的时候,如果在测试的时候写的是namespace+id,那么不同Xml映射文件id可以重复.如果没有配置namespace,也就是说在测试的时候没有写namespace,直接写id,那么不同映射文件的id是不可以重复的.

详解:

1.首先,一个mapper.xml文件中只能有一个,必须配置namespace,不管对不对,不配置namespace或者namespace为空,都会直接报错!

不同xml映射文件namespace的值不能一样.有一样的会直接报错!

2.如果使用mapper接口编程,一定要配置namespace,指向相应的mapper接口文件.这时候不同Xml映射文件id是可以重复的.当然同一个xml映射文件中的id是肯定不能重复的.

3.没有配置namespace是指随便配置一个namespace,随便配置什么都行,(经过测试,namespace不能为空,会直接报错,可以随便写,但是不能不写.).

4如果在测试的时候写的是namespace+id,那么不同Xml映射文件id可以重复.如果没有配置namespace,也就是说在测试的时候没有写namespace,直接写id,那么不同映射文件的id是不可以重复的.

接下来是一个没有配置namespace(也就是说在测试的时候,不写namespace,直接写id),id重复会报错的例子.

(EmployeeMapper.xml跟EmployeeMapper2.xml中的namespace是不一样的,但是里面的id是一样的.)

EmployeeMapper.xml

xml version="1.0"encoding="UTF-8"?>

/strong>mapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

/*查询全部*/

select id,name,age,birthday,salary from t_employee

select>

mapper>

EmployeeMapper2.xml

xml version="1.0"encoding="UTF-8"?>

/strong>mapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

/*查询全部*/

select id,name,age,birthday,salary from t_employee

select>

mapper>

MabatisTest.java

packagecom.xiongluoluo.test;

importcom.xiongluoluo.bean.Employee;

importorg.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

importorg.junit.Test;

importjava.io.IOException;

importjava.io.InputStream;

importjava.util.List;

/**

* Created by Administrator on 2019/12/21 0021.

*/

public classMybatisTest {

@Test

public voidtestSelectAllEmployee(){

String resource ="mybatis-config.xml";

try{

InputStream is = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(is);

SqlSession sqlSession = sqlSessionFactory.openSession();

Listlist = sqlSession.selectList("test.selectAllEmployee");

//如果这里用的是namespace+id那么就不会报错.

//如果这里直接写的id那么就会报错.因为在不同的映射文件里有相同的id.

for(Employee employee : list){

System.out.println(employee);

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值