從XML中構建SqlSessionFactory
從XML文件中構建SqlSessionFactory的實例非常簡單。這里建議你使用類路徑下的資源文件來配置.
1
2
3
|
String resource = "org/mybatis/example/Configuration.xml" ; Reader reader = Resources.getResourceAsReader(resource); sqlMapper = new SqlSessionFactoryBuilder().build(reader); |
XML配置文件包含對MyBatis系統的核心設置,包含獲取數據庫連接實例的數據源和決定事務范圍和控制的事務管理器。如例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<? 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 > |
當然,在XML配置文件中還有很多可以配置的,上面的示例指出的則是最關鍵的部分。
從SqlSessionFactory中獲取SqlSession
現在,我們已經知道如何獲取SqlSessionFactory對象了,基于同樣的啟示,我們就可以獲得SqlSession的實例了。SqlSession對象完全包含以數據庫為背景的所有執行SQL操作的方法。你可以用SqlSession實例來直接執行已映射的SQL 語句。例如:
1
2
3
4
5
6
|
SqlSession session = sqlMapper.openSession(); try { Blog blog = (Blog)session.selectOne( "org.mybatis.example.BlogMapper.selectBlog" , 101 ); } finally { session.close(); } |
現在有一種更簡潔的方法。使用合理描述參數和SQL語句返回值的接口(比如BlogMapper.class),這樣現在就更簡單,更安全的代碼,沒有容易發生的字符串文字和轉換的錯誤。例如:
1
2
3
4
5
6
7
|
SqlSession session = sqlSessionFactory.openSession(); try { BlogMapper mapper = session.getMapper(BlogMapper. class ); Blog blog = mapper.selectBlog( 101 ); } finally { session.close(); } |
探究已映射的SQL語句
這里給出一個基于XML映射語句的示例,這些語句應該可以滿足上述示例中SqlSession對象的調用。
1
2
3
4
5
6
7
8
|
<? 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" parameterType = "int" resultType = "Blog" > select * from Blog where id = #{id} </ select > </ mapper > |
在命名空間“com.mybatis.example.BlogMapper”中,它定義了一個名為“selectBlog”的映射語句,這樣它允許你使用完全限定名“org.mybatis.example.BlogMapper.selectBlog”來調用映射語句,我們下面示例中的寫法也就是這樣的。
1
|
Blog blog = (Blog)session.selectOne( "org.mybatis.example.BlogMapper.selectBlog" , 101 ); |
但下面的調用更有優勢:
映射接口對應映射xml文件的命令空間,接口方法對應映射xml文件中定義的SQL映射的ID。???????????
1
2
|
BlogMapper mapper = session.getMapper(BlogMapper. class ); Blog blog = mapper.selectBlog( 101 ); |
首先它不是基于文字的,那就更安全了。第二,如果你的IDE有代碼補全功能,那么你可以利用它來操縱已映射的SQL語句。第三,不需要強制類型轉換,同時BlogMapper接口可以保持簡潔,返回值類型很安全(參數類型也很安全)。