</configuration>
<mappers>
<!-- 注册userMapper.xml文件,
userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
<mapper resource="sql.xml"/>
<mapper class="cn.com.ibatisdemo.ibatisdemo.UserMapper"/>
<!-- 注册UserMapper映射接口
<mapper class="me.gacl.mapping.UserMapperI"/>-->
</mappers>
</configuration>
XMLConfigBuilder类主要方法说明
方法一:
public Configuration parse() {
if (parsed) {
throw new BuilderException("Each MapperConfigParser can only be used once.");
}
parsed = true;
parseConfiguration(parser.evalNode("/configuration"));
return configuration;
}
方法二:
private void parseConfiguration(XNode root) {
try {
typeAliasesElement(root.evalNode("typeAliases"));
pluginElement(root.evalNode("plugins"));
objectFactoryElement(root.evalNode("objectFactory"));
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
propertiesElement(root.evalNode("properties"));
settingsElement(root.evalNode("settings"));
environmentsElement(root.evalNode("environments"));
typeHandlerElement(root.evalNode("typeHandlers"));
mapperElement(root.evalNode("mappers"));
} catch (Exception e) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
}
}
方法三:
private void mapperElement(XNode parent) throws Exception {
if (parent != null) {
for (XNode child : parent.getChildren()) {
String resource = child.getStringAttribute("resource");
String url = child.getStringAttribute("url");
InputStream inputStream;
if (resource != null && url == null) {
ErrorContext.instance().resource(resource);
inputStream = Resources.getResourceAsStream(resource);
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());
mapperParser.parse();
} else if (url != null && resource == null) {
ErrorContext.instance().resource(url);
inputStream = Resources.getUrlAsStream(url);
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url, configuration.getSqlFragments());
mapperParser.parse();
} else {
throw new BuilderException("A mapper element may only specify a url or resource, but not both.");
}
}
}
}
说明:此版本mybatis-3.0.4有点古老,新版本是resource/url/classes三者必有其一或者使用package动态扫描,下面这个方法是mybatis-3.4.2的方法
private void mapperElement(XNode parent) throws Exception {
if (parent != null) {
for (XNode child : parent.getChildren()) {
if ("package".equals(child.getName())) {
String mapperPackage = child.getStringAttribute("name");
configuration.addMappers(mapperPackage);
} else {
String resource = child.getStringAttribute("resource");
String url = child.getStringAttribute("url");
String mapperClass = child.getStringAttribute("class");
if (resource != null && url == null && mapperClass == null) {
ErrorContext.instance().resource(resource);
InputStream inputStream = Resources.getResourceAsStream(resource);
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());
mapperParser.parse();
} else if (resource == null && url != null && mapperClass == null) {
ErrorContext.instance().resource(url);
InputStream inputStream = Resources.getUrlAsStream(url);
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url, configuration.getSqlFragments());
mapperParser.parse();
} else if (resource == null && url == null && mapperClass != null) {
Class<?> mapperInterface = Resources.classForName(mapperClass);
configuration.addMapper(mapperInterface);
} else {
throw new BuilderException("A mapper element may only specify a url, resource or class, but not more than one.");
}
}
}
}
}
总结如下:
<mappers>
<!-- 通过package元素将会把指定包下面的所有Mapper接口进行注册 -->
<package name="com.tiantian.mybatis.mapperinterface"/>
<!-- 通过mapper元素的resource属性可以指定一个相对于类路径的Mapper.xml文件 -->
<mapper resource="com/tiantian/mybatis/mapper/UserMapper.xml"/>
<!-- 通过mapper元素的url属性可以指定一个通过URL请求道的Mapper.xml文件 -->
<mapper url="file:///E:/UserMapper.xml"/>
<!-- 通过mapper元素的class属性可以指定一个Mapper接口进行注册 -->
<mapper class="com.tiantian.mybatis.mapperinterface.UserMapper"/>
</mappers>
当使用mapper元素进行Mapper定义的时候需要注意:mapper的三个属性resource、url和class对于每个mapper元素只能指定一个,要么指定resource属性,要么指定url属性,要么指定class属性,不能都指定,也不能都不指定。
原创不易,欢迎打赏,请认准正确地址,谨防假冒
相关推荐
MyBatis是一款流行的Java...总的来说,MyBatis源码分析思维导图会涵盖MyBatis的各个关键组件、工作流程、特性以及扩展机制。通过深入学习和理解这些内容,开发者能够更好地利用MyBatis进行数据库操作,并优化其性能。
开发者需要在MyBatis的配置文件(mybatis-config.xml)中配置数据源、事务管理器以及Mappers。 在"mybatis demo"中,"dubbo-lcn-demo-master"可能是一个包含整个项目的压缩包,解压后可能包括以下部分: 1. `pom....
"尚硅谷Mybatis源码和jar包"是一个关于Mybatis的学习资源集合,包含源码分析和相关的课程材料,适合对Mybatis感兴趣或者需要深入理解其工作原理的开发者。下面将详细探讨Mybatis的关键知识点。 首先,Mybatis的核心...
通过对MyBatis源码的学习,我们可以了解到MyBatis如何解析配置,如何构建SQL,如何处理参数和结果,以及如何利用缓存提高性能。这对于理解和优化MyBatis的应用,甚至开发自己的持久层框架都有极大的帮助。在阅读源码...
2. **Configuration**:这是MyBatis的核心配置类,包含了所有的配置信息,如数据源、Mappers、设置等。SqlSessionFactoryBuilder会根据传入的配置信息创建Configuration实例。 3. **SqlSessionFactory**:...
`mybatis-3.2.2-sources.jar` 包含了MyBatis的源代码,开发者可以通过阅读源码了解MyBatis内部的工作原理,如SqlSession、Executor、Mapper接口等核心组件的实现,以及动态SQL的处理方式。这对于深入学习MyBatis,...
1. **配置文件解析**:MyBatis的核心配置文件`mybatis-config.xml`定义了数据源、事务管理器、Mappers等关键元素。通过`XMLConfigBuilder`解析这些配置,构建出`Configuration`对象,它是整个MyBatis框架的中心。 2...
### Mybatis源码分析 #### 1. 解析配置文件,创建SQLSessionFactory 在MyBatis框架中,创建`SQLSessionFactory`是初始化整个框架的重要步骤之一。这一过程涉及到了配置文件的读取与解析,以及如何构建出可以用于...
在分析MyBatis源码时,可以采用宏观和微观两种视角。宏观上理解整个框架的架构和流程,微观上深入到具体的类和方法,通过阅读和调试代码来理解其实现细节。同时,绘制流程图或UML图能帮助更好地梳理组件间的交互。 ...
- 加载配置:Mybatis 首先加载配置文件,解析出数据源、事务管理器、Mappers 等信息。 - 创建 SqlSessionFactory:基于配置信息创建 SqlSessionFactory,它是创建 SQLSession 的工厂。 - 获取 SQLSession:通过 ...
1. **配置解析**:MyBatis的配置文件(mybatis-config.xml)被解析成Configration对象,这个对象包含了所有的全局配置信息,如数据源、事务管理器、Mappers等。解析过程主要由XMLConfigBuilder类完成。 2. **...
- **Configuration**: 包含所有配置信息,如mappers、typeAliases、objectFactory等,是MyBatis的核心。 - **SqlSessionManager**: SqlSession的管理器,负责SqlSession的生命周期,如打开、关闭和提交/回滚事务。...
### MyBatis两天视频教程+源码+笔记 #### 一、MyBatis简介与应用场景 **MyBatis**是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集...
它是配置文件的根元素,包含了`properties`(用于加载外部属性文件)、`settings`(系统设置)、`typeAliases`(类型别名)、`objectFactory`(对象工厂)、`plugins`(插件)、`mappers`(映射器)等子元素。...
通过这个文件,开发者可以了解MyBatis全局配置的正确格式,包括数据源、事务管理器、Mappers等的配置。 在实际使用中,开发者首先需要配置MyBatis的全局配置文件mybatis-config.xml,然后创建Mapper接口和对应的XML...
2. **映射器(Mappers)配置**:映射器文件是Mybatis的核心,它们定义了SQL语句和Java对象之间的映射关系。你可以通过类路径、资源URL或者完全限定的类名来引用映射器文件。 ```xml <mappers> </mappers> ``` ...
通过这个源码学习,你可以了解到如何配置Mybatis,如何编写Mapper接口和XML文件,以及如何在实际项目中应用Mybatis进行数据库操作。同时,还可以结合提供的博客链接...
2. 配置MyBatis:创建MyBatis的配置文件(mybatis-config.xml),定义数据源、事务管理器、Mappers等信息。 3. 创建SqlSessionFactoryBean:在Spring的配置文件中,创建一个`SqlSessionFactoryBean`,通过`...
MyBatis是一个流行的Java持久层框架,它简化了数据库与Java应用程序之间的交互,提供...源码阅读可以让我们深入理解框架如何处理SQL执行、参数绑定、结果映射等核心任务,从而更好地利用MyBatis优化我们的数据库操作。
5. **Mybatis源码分析** - **SqlSessionFactoryBuilder**:用于构建SqlSessionFactory的工具类,`build()`方法接收一个InputStream,解析SqlMapConfig.xml,生成SqlSessionFactory实例。 - **SqlSessionFactory**...