1. 程式人生 > 實用技巧 >Mybatis系列(一):mybatis的入門

Mybatis系列(一):mybatis的入門

Mybatis是一款優秀的持久層框架,它支援自定義sql,儲存過程以及高階對映,幾乎不需要任何的JDBC程式碼以及設定引數和獲取結果集的工作。接下來看一下Mybatis的基本使用。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);   //
構建sqlSessionFactory //獲取session,及對映器例項 try (SqlSession session = sqlSessionFactory.openSession()) { //這是標準獲取sqlsession和對映器例項的方式   BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
}

配置檔案:全域性配置檔案和sql對映檔案

全域性配置檔案:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
sql對映檔案:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>

作用域和生命週期

物件生命週期:依賴注入框架可以建立執行緒安全的,基於事務的sqlsession和對映器,並將它們直接注入到bean中,因此可以忽略他們的生命週期。

SqlSessionFactoryBuilder例項:一旦建立了SqlsessionFactory就不再需要他了,所以他的最佳作用域是方法域。

SqlSessionFactory例項:一旦被建立就應該在應用的執行期間一直存在,沒有任何理由丟棄它,使用sqlSessionFactory的最佳實踐是在應用期間不應該重複建立多次,所以SqlSessionFactory的最佳作用域是應用作用域,最簡單的模式就是單例項或靜態單例模式。

SqlSession例項:每個執行緒都應該有他自己的sqlSession例項。sqlSession例項不是執行緒安全的,所以不能被共享,它的最佳作用域是請求或方法作用域。下面就是確保sqlSession關閉的標準模式

try (SqlSession session = sqlSessionFactory.openSession()) {
  // 你的應用邏輯程式碼
}

對映器例項:它是繫結一些對映語句介面的。對映器介面的例項是從SqlSession中獲得的,任何對映器例項的最大作用域應該與請求他們的SqlSession相同。但是方法域才是對映器例項最合適的作用域。如果在整個請求域保留對映器例項也不會有什麼問題,但是管理那麼多的像SqlSession的資源會讓你忙不過來。最好就是下面的使用方式:

try (SqlSession session = sqlSessionFactory.openSession()) {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  // 你的應用邏輯程式碼
}

參考mybatis中文文件:https://mybatis.org/mybatis-3/zh/getting-started.html