1. 程式人生 > >關於Mybatis關聯對映檔案中的傳參機制

關於Mybatis關聯對映檔案中的傳參機制

mybatis有兩種關聯對映檔案的方式
(1)第一種是直接讀取對映檔案


    通過對映檔名稱路徑加上要處理的sql語句所在塊的id

    @Test
	public void findCustomerByIdTest() throws IOException {
		// 1.讀取mybatis配置檔案 獲得一個輸入流   
		InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

		// 2.建立mybatis的sql工廠物件
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
		// 3.通過工廠物件 建立sql會話
		SqlSession sqlSession = sessionFactory.openSession();

		// 4.通過sql會話執行相應的方法 獲得結果
		 String mpsrc = "com.cxit.mapper.CustomerMapper.findCustomerById";
		 Customer cust = sqlSession.selectOne(mpsrc, 1);
		

		// 5.列印結果
		System.out.println(cust);
		// 6.關閉session
		sqlSession.close();

	}

這種方式很直接了當,建立的sql會話物件,執行相應的方法,把要傳的引數傳到對映檔案中(傳的引數只能是一個),
當傳的引數是基本型別時,在對映檔案中的#{}裡面可以任意寫,${}裡面則只能寫value;
當傳的引數是pojo型別時,在對映檔案中的#{}裡面只能寫與pojo屬性相對應的名稱(因為要通過反射機制,進行一一對應),${}裡面也要如此。

(2)第二種是通過介面關聯對映檔案

對映檔案裡的名稱空間得改成介面的包.類名,

通過反射,獲得一個介面位元組碼物件,然後通過介面位元組碼物件建立一個介面物件,再通過介面物件執行相應的方法。

public void findCustomerByIdTest() throws IOException {
		// 1.讀取mybatis配置檔案 獲得一個輸入流   
		InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

		// 2.建立mybatis的sql工廠物件
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
		// 3.通過工廠物件 建立sql會話
		SqlSession sqlSession = sessionFactory.openSession();

		// 4.通過sql會話執行相應的方法 獲得結果
		CustomerDao dao = sqlSession.getMapper(CustomerDao.class);
		Customer cust = dao.findCustomerById(1);

		// 5.列印結果
		System.out.println(cust);
		// 6.關閉session
		sqlSession.close();

	}

第二種的傳參機制與第一種大抵相同,只不過是換成了介面的形參接收引數,#{}與${}的處理機制與第一種的一樣。