mybatis--sqlsessionDaosupport

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

转载于:https://my.oschina.net/u/3043570/blog/2208682

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值