MyBatis最后一步一定是處理相關(guān)的結(jié)果——把數(shù)據(jù)映射成對(duì)應(yīng)的模型對(duì)象。事實(shí)上在筆者看來如果讀者們了解了mybatis如何去執(zhí)行數(shù)據(jù)庫,又是如何處理數(shù)據(jù)結(jié)果。那么就了解了mybatis的主要路線。因?yàn)椴还苁鞘裁礃幼拥腛RM最終都是要執(zhí)行和處理結(jié)果的。而mybatis的亮點(diǎn)筆者也講了——管理sql語句。所以相對(duì)而言,處理結(jié)果就顯得十分的次要。但是筆者還是希望能在這里停留一下,研究他是如何處理結(jié)果。

mybatis處理結(jié)果的代碼都在DefaultResultSetHandler類里面。很抱歉的是筆者去掉了程序是如何執(zhí)行到DefaultResultSetHandler類的。這里面還是希望讀者們自行的去跟蹤一下。DefaultResultSetHandler類的handleResultSets方法便是筆者切入的代碼。事實(shí)上當(dāng)代碼執(zhí)行到handleResultSets方法的時(shí)候,已經(jīng)執(zhí)行了數(shù)據(jù)庫。這在PreparedStatementHandler類里面就體現(xiàn)出來了。如下

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

  public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
    PreparedStatement ps = (PreparedStatement) statement;    ps.execute();    return resultSetHandler.<E> handleResultSets(ps);
  }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

用過mybatis的人都知道resultMap節(jié)點(diǎn)的作用。select節(jié)點(diǎn)的resultMap屬性就是用來指點(diǎn)使用哪一個(gè)resultMap節(jié)點(diǎn)。而返回的結(jié)果也是用這一個(gè)節(jié)點(diǎn)來設(shè)置的。如下

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

<select id="SelectProducts" resultMap="result" >
   &