分為兩部分,解析初始化和使用
拿含有selectkey標簽的insert語句解析來說
解析部分
1.解析時看有沒有selectkey標簽,有的話先解析selectkey的內容,包括對其SQL的解析并封裝成一個MappedStatement和創建KeyGenerator放入configuration中
2.解析insert語句,然后從configuration取出KeyGenerator和語句一起封裝成MappedStatement,這里的KeyGenerator是實現這個功能的重點
使用部分
1.正常執行完insert語句
2.執行完不返回,會取出KeyGenerator執行processGeneratedKeys方法,如果解析的時候有selectkey標簽,這里判斷能通過就能執行selectkey里面的語句,然后結果通過反射注入到參數中,結果中就能取到
細節點:這兩個sql是在同一個線程中,執行第一個insert時已經獲取了數據庫連接,再執行select時,獲取連接的代碼加一個是否存在判斷,如果已存在就直接返回已存在的數據庫連接,這樣就能讓兩個sql在同一個數據庫連接中執行了,才能獲取到insert后的索引值,否則使用的是兩個數據庫連接,因為數據庫隔離級別的原因,獲取不到另一個連接中未提交的數據