public abstract class SqlSessionDaoSupport extends DaoSupport {
private SqlSession sqlSession;
private boolean externalSqlSession;
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
if (!this.externalSqlSession) {
this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);
}
}
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSession = sqlSessionTemplate;
this.externalSqlSession = true;
}
mybatis初始化后主要干什么事情?为什么要创建sqlsessionfactory?这和sqlsessiondaosupport有什么关系?
mybatis框架初始化是对加载读取xml配置文件的过程
sqlmapconfig.xml中
configuration 配置
× properties 属性
× settings 设置
× typeAliases 类型命名
× typeHandlers 类型处理器
× objectFactory 对象工厂
× plugins 插件
× environments 环境
× environment 环境变量
× transactionManager 事务管理器
× dataSource 数据源
是对其一层层加载到内存中,org.apache.ibatis.session.Configuration 这个对象作为承载这些信息的容器,configuration对象和xml的结构基本相同,mybatis初始化就是创建configuration对象过程
MyBatis的初始化可以有两种方式:
- 基于XML配置文件:基于XML配置文件的方式是将MyBatis的所有配置信息放在XML文件中,MyBatis通过加载并XML配置文件,将配置文信息组装成内部的Configuration对象,就是上面所说
- 基于Java API:这种方式不使用XML配置文件,需要MyBatis使用者在Java代码中,手动创建Configuration对象,然后将配置参数set 进入Configuration对象中
- String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//手动创建XMLConfigBuilder,并解析创建Configuration对象
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, null,null);
Configuration configuration=parse();
//使用Configuration对象创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
//使用MyBatis
SqlSession sqlSession = sqlSessionFactory.openSession();
List list = sqlSession.selectList("com.foo.bean.BlogMapper.queryAllBlogInfo");
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List list = sqlSession.selectList("com.foo.bean.BlogMapper.queryAllBlogInfo");
new sqlsessionfactorybuilder().build(inputstream)初始化mybatis过程:根据输入流加载xml文件生成一个configuration对象,然后利用configuration对象生成sqlsessionfactory过程
涉及到的设计模式
1SqlSessionFactory的创建
2数据库连接环境Environment对象的创建
mybatis-spring-1.2.0 以来, SqlSessionDaoSupport 的 setSqlSessionTemplate 和 setSqlSessionFactory 两个方法上的 @Autowired 注解被删除,这就意味着继承于 SqlSessionDaoSupport 的 DAO 类.
比较好的解决办法是在我们的 DAO 类中覆盖这两个方法之一,并加上 @Autowired 注解。那么如果在每个 DAO 类中都这么做的话,显然很低效。更优雅的做法是,写一个继承于 SqlSessionDaoSupport 的 BaseDao,在 BaseDao 中完成这个工作,然后其他的 DAO 类再都从 BaseDao 继承。
可以手动集成sqlsessiondaosupport来创建sqlsession,如果在集成spring中,则MapperFactoryBean对象在向spring注入sqlsessionfactory会创建sqlsession对象,因为mapperfactorybean父类就是sqlsessionfdaosupport
https://www.cnblogs.com/wangmingshun/p/5674633.html