3.1 解析Mapper.xml文件:
package com.dxh.config; import com.dxh.pojo.Configuration; import com.dxh.pojo.MappedStatement; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.InputStream; import java.util.List; public class XMLMapperBuild { private Configuration configuration; public XMLMapperBuild(Configuration configuration) { this.configuration = configuration; } public void parse(InputStream inputStream) throws DocumentException { Document document = new SAXReader().read(inputStream); Element rootElement = document.getRootElement(); String namespace = rootElement.attributeValue("namespace"); List<Element> list = rootElement.selectNodes("//select"); for (Element element : list) { String id = element.attributeValue("id"); String resultType = element.attributeValue("resultType"); String paramterType = element.attributeValue("paramterType"); String sqlText = element.getTextTrim(); MappedStatement mappedStatement = new MappedStatement(); mappedStatement.setId(id); mappedStatement.setParamterType(paramterType); mappedStatement.setResultType(resultType); mappedStatement.setSql(sqlText); String key = namespace+"."+id; configuration.getMappedStatementMap().put(key,mappedStatement); } } }很容易理解,因为我们解析后要返回Configuration对象,所以我们需要声明一个Configuration 并初始化。
我们把加载文件后的流传入,通过dom4j解析,并通过ComboPooledDataSource(C3P0连接池)生成我们需要的DataSource,并存入Configuration对象中。
Mapper.xml解析方式同理。
3.2 创建SqlSessionFactoryBuilder类:
有了上述两个解析方法后,我们创建一个类,用来调用这个方法,同时这个类返回SqlSessionFacetory
SqlSessionFacetory:用来生产sqlSession:sqlSession就是会话对象(工厂模式 降低耦合,根据不同需求生产不同状态的对象)
package com.dxh.sqlSession; import com.dxh.config.XMLConfigBuild; import com.dxh.pojo.Configuration; import org.dom4j.DocumentException; import java.beans.PropertyVetoException; import java.io.InputStream; public class SqlSessionFacetoryBuild { public SqlSessionFacetory build(InputStream in) throws DocumentException, PropertyVetoException { //1. 使用dom4j解析配置文件,将解析出来的内容封装到configuration中 XMLConfigBuild xmlConfigBuild = new XMLConfigBuild(); Configuration configuration = xmlConfigBuild.parseConfig(in); //2. 创建sqlSessionFactory对象 工厂类:生产sqlSession:会话对象,与数据库交互的增删改查都封装在sqlSession中 DefaultSqlSessionFactory sqlSessionFacetory = new DefaultSqlSessionFactory(configuration); return sqlSessionFacetory; } } 4. 创建SqlSessionFacetory接口和实现类基于开闭原则我们创建SqlSessionFacetory接口和实现类DefaultSqlSessionFactory