Mybatis系列(一):mybatis的入門
阿新 • • 發佈:2020-07-16
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