1. 程式人生 > >MyBatis3-topic04,05 -介面式程式設計

MyBatis3-topic04,05 -介面式程式設計

筆記要點

/**介面式程式設計:
 * 1.  原生: Dao 介面-->Dao介面的實現類
 *   mybatis: Mapper --> 有一個與之對應的 XXMapper.xml
 * 2. SqlSession
 *      代表與資料庫的一次會話,用完必須關閉資源;
 *3.SqlSession 和connection 一樣都是非執行緒安全,不能宣告為全域性變數;
 *         每次使用都需要重新生命.
 * 4.mapper介面沒有實現類, 但是mybatis 會為這個介面生成一個代理物件:
 *        (需要先將介面和XML檔案進行繫結!)
 *        EmployeeMapper empMapper=openSession.getMapper(EmployeeMapper.class);
 *  5.兩個重要的配置檔案:
 *      mybatis的全域性配置檔案: 包含資料庫連線池資訊,事物管理器資訊,系統檔案的資訊.....
 *      SQL對映檔案: 儲存了每一個SL語句的對映資訊,
 
*/

 

出錯分析

重新組織了工程結構後, mapper.xml內的內容改為: 
<select id="getEmpById" resultType="com.bean.Employee">...</select>. 
    resultType   記得更改為當前DAO的src下的類的路徑!  

 

工程重新組織

 

本節測試程式碼 Test_tp04

package com.test;
import com.bean.*;
import com.dao.*;
import org.apache.*;
import java.io.IOException; import java.io.InputStream; public class Test_tp04 { //建立一個模板,直接返回一個新建的SqlSessionFactory public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream); } @Test //第四節測試,測試介面式程式設計 public void test01() throws IOException{ //1.獲取sqlSessionFactory物件 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //呼叫模板的方法 //2.獲取一個SqlSession物件 SqlSession openSession = sqlSessionFactory.openSession(); try { //3.獲取介面的實現類 EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class); Employee employee = mapper.getEmpById(1); System.out.println(mapper.getClass()); System.out.println(employee); } finally { openSession.close(); } } }

 

測試demo結果展示

DEBUG 11-27 12:12:24,463 ==>  Preparing: select id,last_name lastname,gender,email from tbl_employee where id = ?   (BaseJdbcLogger.java:145) 
DEBUG 11-27 12:12:24,479 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 11-27 12:12:24,495 <==      Total: 1  (BaseJdbcLogger.java:145) 
class com.sun.proxy.$Proxy4
Employee{id=1, lastname='tom', email='[email protected]', gender='0'}