MyBatis的Dao層注入SqlSession

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   檔案   2014   

  有點坑爹,以前沒用過Mybatis,最近才用,而且一直用Mybatis推薦的介面映射的方式,但是今天有人告訴我介面方式用得少,大多還是採用從設定檔裡面讀sql的方式,當然介面也是類似的,都是利用mapper.xml。

  於是就想把這東西整合進來,當進行dao的時候發現一個小問題,sqlSession怎麼注入進來的問題,以前Hibernate的的習慣用sessionFactory的openSession()方法,但是每個方法都要open一下,麻煩,就想能不能直接把sqlSession通過註解注入進來,有下面這三個類都實現了這個介面:

  

我估計這三個類都差不多,個人估計是功能呢和支援上或者線程同步上面的差別,應該都能產生一個SqlSession執行個體讓我在dao層中運用,開啟DefaultSqlSession這個類,裡面的幾個屬性沒看懂,於是放棄這個類了;在開啟SqlSessionManager這個類,發現構造方法都跟輸入資料流有點關係,我懷疑是根據設定檔之類的方式來執行個體化,又放棄了;在開啟SqlSessionTemplate這個類,發現構造方法只和sqlSessionFactory有關係,感覺有點像了,因為容器裡面本來就有sqlSessionFactory,所以可以直接執行個體化,他的構造方法:

  public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {    this(sqlSessionFactory, sqlSessionFactory.getConfiguration().getDefaultExecutorType());  }

於是在spring設定檔中加入下面配置,通過構造方法來執行個體化。

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">          <constructor-arg index="0" ref="sqlSessionFactory"/>      </bean>

然後在dao層注入:

@Repositorypublic class ArticleDaoImpl implements ArticleDao {    @Resource    private SqlSession sqlSession;}

隨便找了個類測了下通過了,說明這樣做是可行的,然後上網查了下看別人是怎麼做的,有人說到dao繼承SqlSessionDaoSupport這個類,這個類裡麵包含了有sqlSession,於是看了下這個類的源碼,發現這個類裡面的sqlSession其實就是SqlSessionTemplate類的實力,跟上面一樣的,

  public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {    if (!this.externalSqlSession) {      this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);    }  }  public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {    this.sqlSession = sqlSessionTemplate;    this.externalSqlSession = true;  }

也就沒去研究這個類到底有什麼用,我個人是有個不好的癖好,除非萬不得已我不太喜歡去繼承某個類,感覺一旦繼承了就加入了耦合,有這麼個毛病,所以就這樣子了,不知道SqlSession的其他兩個實現有什麼特點,也不清楚網上說繼承這個SqlSessionDaoSupport有什麼特點。唉~~,以後再看看吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.