当前位置: 代码迷 >> 综合 >> #MyBatis中SQL配置文件的命名规范 #package标签 #FDDLC
  详细解决方案

#MyBatis中SQL配置文件的命名规范 #package标签 #FDDLC

热度:74   发布时间:2024-02-26 09:13:47.0

先约定两个概念:

我们知道:MyBatis常常涉及两个xml配置文件,一个叫【主配置文件】,里面可以配置数据源等;另一个叫【SQL配置文件】,里面可以写SQL代码。

 

请看两个代码片段:

片段1:

<mappers><mapper resource="cn/liuxingchang/dao/AccountDao.xml" /><mapper resource="cn/liuxingchang/dao/UserDao.xml" />
</mappers>

片段2:

<mappers><package name="cn.liuxingchang.dao" />
</mappers>

片段1用于在MyBatis【主配置文件】里挨个注册【SQL配置文件】,片段2用于在MyBatis主配置文件里批量注册dao接口(java文件)。

假设我们采用的是dao的代理实现方式(无需手动编写dao实现类),并且已知,AccountDao接口在cn.liuxingchang.dao这个包下。

那么对于方式二,MyBatis怎么生成dao接口的代理实现类呢?肯定需要两部分的信息:【dao接口的信息】和【对应的SQL配置文件】,并且二者之间要能对应上。方式二已经给了接口所在的包,前面又已知该包下有个AccountDao接口,所以接口信息是知道了,还差【对应的SQL配置文件】,MyBatis默认会去resources目录(类路径)下的cn/liuxingchang/dao这个目录下去找AccountDao.xml(和AccountDao接口同名,且路径也一致!)

从上面可以看出,方式二还是很严格的。毕竟,你只给了包路径。在包路径下能找到所有的接口,所以代理实现类两部分信息中的【dao接口的信息】就知道了,但你又没有显式地给出【对应的SQL配置文件】,所以这个信息只能靠你和MyBatis之间的约定。这个约定是:【对应的SQL配置文件】要和dao接口同名,且在resources中 和包名一致的路径下 (包名叫cn.liuxingchang.dao,对应的SQL配置文件就得在resources中的cn/liuxingchang/dao下)。

另外,【dao接口】的方法名和【SQL配置文件】对应操作的id必须相同,这点很好理解。

 

如果是方式一呢?

对于方式一,代理实现类还是需要【dao接口的信息】和【对应的SQL配置文件】这两部分信息。

从resource的属性值中能找到【SQL配置文件】,还差【dao接口的信息】。能知道吗?还是又得像方式二那样,要靠我们和MyBatis之间的约定?

这回不需要靠约定,约定太严格了!

给出【SQL配置文件】中的一段代码:

<mapper namespace="cn.liuxingchang.dao.AccountDao"><select id="findAll" resultType="cn.liuxingchang.domain.Account">select * from account</select>
</mapper>

从namespace就能知道【对应的dao接口信息】!

所以方式一有如下两个不必:

1、【SQL配置文件】的名字不必和【对应的接口】相同!

2、【SQL配置文件】的路径不必和【对应的接口】的包名一致!

 

  相关解决方案