1. 程式人生 > >mybaits入門2--mybatis工作流程+實踐練習

mybaits入門2--mybatis工作流程+實踐練習

上節回顧:上節介紹了mybatis歷史,特點以及環境的搭建,本節主要介紹下mybatis的工作流程以及使用它進行一個簡單的練習

一、mybatis的工作流程


在整個過程中,比較關鍵的是兩個配置檔案兩個物件,下面我儘量用白話文把過程梳理一遍:

1.SqlSessionFactory物件

這個物件作用是與資料庫之間建立會話,這樣我們就需要連線資料庫的資訊,資訊從哪裡來,從基本配置檔案中來。怎麼把SqlSessionFactory和基本配置檔案聯絡起來,程式碼實現如下:

		String resource = "book/map/mybatisconfig.xml"; //基本配置檔案的路徑
		Reader reader = null;//建立輸入流
		try {
			reader = Resources.getResourceAsReader(resource);//mybatis自帶的API方法
		} catch (IOException e) {
			e.printStackTrace();
		}		
		SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);//通過讀取流從而讀取基本配置檔案
把基本配置檔案的路徑放到流裡面,再讓SqlSessionFactory去讀取這個流物件就可以建立聯絡了。

2.基本配置檔案:mybatisconfig.xml

下面是個簡單的基本配置檔案,只包含了資料庫連線資訊和對映配置檔案路徑資訊:

<?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="com.mysql.jdbc.Driver"/> 
                <property name="url" value="jdbc:mysql://localhost:3306/book"/> 
                <property name="username" value="root"/> 
                <property name="password" value="123654"/> 
            </dataSource> 
        </environment> 
    </environments> 
    <!-- 引用map配置檔案 -->
    <mappers>
    	<mapper resource="book/map/User.xml"/>
    </mappers>
</configuration> 
步驟1中的SqlSessionFactory物件通過流讀取這個配置檔案裡面連線資料庫的資訊從而建立與資料庫的聯絡。

在上面配置檔案中還有一個部分是引用map配置檔案,也就是對映配置檔案,這幾行程式碼是把基本配置檔案和對映配置檔案聯絡起來的。當讀取基本配置檔案時,也就知道了對映配置的位置了,從而可以知道里面的sql語句。

3.對映配置檔案:User.xml

這個配置檔案裡寫的全是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="book.pojo.User">  
    <select id="findById" parameterType="int" resultType="book.pojo.User">
    	select * from book where id=#{id}
    </select>
 </mapper>  
格式很簡單,跟html標籤很像,查詢語句中在<select>標籤中寫sql語句,

<select>標籤中的屬性:id是唯一識別符號:後面session物件要用哪條sql語句,就是通過這個id獲取對應的sql語句

  parameterType:傳入引數,這裡傳入引數是個id,也就是int型別

  resultTtype:這是一條通過主鍵id查詢物件的sql語句,查詢結果返回一個物件,resultType就用於接收這個物件。

4.SqlSession物件:

SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);//通過讀取流從而讀取基本配置檔案
SqlSession session = sqlMapper.openSession();//通過SqlSessionFactory物件建立SqlSession物件
User user = session.selectOne("findById", 1);//sesion執行sql語句
System.out.println(user);
session.close();//記得最後要關閉session物件
步驟1已經建立了SqlSessionFactory物件,呼叫它的openSession方法可建立SqlSession物件。

SqlSession物件呼叫mybaits自帶的一系列API方法來執行sql語句。這裡的session.selectOne("findById",1)意思就是獲取對映配置檔案中id是findById的那條sql語句,1是傳入的id值。

二、簡單的小練習

學以致用,只有在實踐中才能發現不足,我在第一次執行的時候就報了兩個錯誤,後來在網上弄清楚並記錄在了部落格裡。

步驟:

1.在資料庫中建裡一張表(前提你已經安裝了自己的一個數據庫,比如mysql資料庫),並新增欄位:id,username,password


2.手動往表中新增一條資料,看到了嗎,夥計,我新增的使用者名稱是  hello world!


3.回到程式中,建裡一個實體類User

這個很簡單,新增三個屬性,保持與資料庫中的欄位名一致,並加上對應的get和set方法,夥計,這個肯定難不倒你。

為了測試方便,你還可以加上toString()方法

4.分別貼上一個基本配置檔案和對映配置檔案放到程式中,這裡放上我的目錄,以防有的朋友已經頭昏眼花了~




對的,如果你從網上找不到這兩個配置檔案,那麼告訴你個好訊息,自己分別建立個xml檔案(這個總該會的吧),之後把這篇文章頂部的兩個xml檔案的內容對號入座的貼上複製一下就搞定了

好的,搞定一切,就可以寫個測試類進行測試了。瞧,我目錄裡的test1就是我的測試類:

public class test1 {
	public static void main(String[] args) {
		String resource = "book/map/mybatisconfig.xml"; //基本配置檔案的路徑
		Reader reader = null;//建立輸入流
		try {
			reader = Resources.getResourceAsReader(resource);//mybatis自帶的API方法
		} catch (IOException e) {
			e.printStackTrace();
		}		
		SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);//通過讀取流從而讀取基本配置檔案
		SqlSession session = sqlMapper.openSession();//通過SqlSessionFactory物件建立SqlSession物件
		User user = session.selectOne("findById", 1);//sesion執行sql語句
		System.out.println(user);
		session.close();//記得最後要關閉session物件
	}
}
如果你看了上一節的環境搭建,在這裡缺什麼包的話,直接引入即可。

最後,點選執行。出現下面程式碼就可以恭喜你完成了這個小作業了!

[framework] 2016-03-01 21:10:48,328 - book.pojo.User.findById -0    [main] DEBUG book.pojo.User.findById  - ==>  Preparing: select * from book where id=? 
[framework] 2016-03-01 21:10:48,415 - book.pojo.User.findById -87   [main] DEBUG book.pojo.User.findById  - ==> Parameters: 1(Integer)
[framework] 2016-03-01 21:10:48,443 - book.pojo.User.findById -115  [main] DEBUG book.pojo.User.findById  - <==      Total: 1
User [id=1, username=hello world!, password=123456]

下一節:mybatis入門3--mybatis增刪改查基礎操作