1.1 项目准备
mybatis框架分析
![](https://i-blog.csdnimg.cn/blog_migrate/392d43198429d7446f8fa9a6239b79c8.png)
1.1.1 项目环境
- sqlMapConfig.xml核心配置文件,去掉DTD约束。因为dom4j会上网去找dtd文件。
- UserMapper.xml映射配置文件,去掉DTD约束。
- UserMapper接口。
- User实体类。
导入相关jar包
UserMapper.xml
5.1.2 代码实现
- 创建包cn.guardwhy.framework。
- 创建实体类:Mapper包含4个属性:namespace,id,resultType,sql。
- 重写toString()方法,方便后期测试看到封装的结果。
- 生成get和set方法,一个Mapper对象代表一条要操作的查询语句对象。
package cn.guardwhy.framework;
/**
* 封装UserMapper.xml属性
*/
public class Mapper {
private String namespace; // 封装接口名
private String id; // 方法名
private String resultType; // 返回实体类类型
private String sql; // 要执行的SQL语句
/**
* get.set方法
* @return
*/
public String getNamespace() {
return namespace;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getResultType() {
return resultType;
}
public void setResultType(String resultType) {
this.resultType = resultType;
}
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
@Override
public String toString() {
return "Mapper{" +
"namespace='" + namespace + '\'' +
", id='" + id + '\'' +
", resultType='" + resultType + '\'' +
", sql='" + sql + '\'' +
'}';
}
}
5.2 dom4j方法
解析XML文件,得到Document对象
1. 得到输入流InputStream
2. new SAXReader().read(输入流) 返回Document对象
Document常用方法
方法名 | 说明 |
---|---|
Element getRootElement() | 得到XML中根元素(标签) |
List<Node> selectNodes(String xpath) | 通过xpath查询多个节点Node, Node是Element的父接口 |
Node selectSingleNode(String xpath) | 通过xpath得到一个节点 |
Element element(String name) | 通过元素的名字得到它的一个子元素 |
属性文本相关方法
方法名 | 功能说明 |
---|---|
String attributeValue(String name) | 通过标签的属性名字,得到属性的值 |
String getTextTrim() | 得到标签中文本内容,并且去掉前后的空格 |
5.3 核心配置文件
封装核心配置文件:sqlMapConfig.xml文件
- 创建driver,url, username,password四个属性
- 实例化1个空的Map集合:封装其它映射文件的XML信息
- 声明数据源对象DataSource
- 生成get和set方法,生成toString()方法
loadSqlMapConfig()方法
1、创建loadSqlMapConfig()方法,它的作用
- 解析sqlMapConfig.xml配置文件,给Configuration中的属性赋值。
- 解析UserMapper.xml配置文件,给Mapper中的属性赋值。
2、在构造方法中调用方法: loadSqlMapConfig( )
5.3.1 代码实现
核心配置文件
package cn.guardwhy.framework;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import javax.sql.DataSource;
import javax.xml.parsers.SAXParser;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 解析XML文件:sqlMapConfig.xml, UserMapper.xml
*/
public class Configuration {
// 1.创建连接池的属性
private String driver;
private String url;
private String username;
private String password;
// 2.定义连接池
private DataSource dataSource;
// 3.实例化1个空的Map集合:封装其它映射文件的XML信息
private Map<String, Mapper> mappers = new HashMap<>();
// 4.在构造方法中调用方法: loadSqlMapConfig()
public Configuration()