欧美经典成人在观看线视频_嫩草成人影院_国产在线精品一区二区中文_国产欧美日韩综合二区三区

當前位置:首頁 > 軟件開發 > 正文

resultset接口的方法 resultset獲取數據

resultset接口的方法 resultset獲取數據

ibatis是如何找到dao層的介紹本質還是很簡單的,原來用JDBC實現的時候,你得寫各種類,類里面寫好各種操作SQL的語句,現在用了XML以后,只不過是把這些信息保存...

ibatis是如何找到dao層的

介紹

本質還是很簡單的,原來用JDBC實現的時候,你得寫各種類,類里面寫好各種操作SQL的語句,現在用了XML以后,只不過是把這些信息保存到XML中了,運行的時候還是會有類來執行SQL語句的,這個類是怎么來的呢?是Mybatis框架利用:動態代理和反射機制這2種機制,來幫你把這個類給創建出來,簡單總結一下原理,你可以去看看mybatis的源碼,類不多,還是比較容易理清楚的,我幫你總結一下大概流程

Mybatis的運行分為兩部分,第一部分是讀取配置文件緩存到Coufiguration對象,用以創建SqlSessionFactory,第二部分是SqlSession的執行過程。

Mybatis實現的基本原理是利用:動態代理和反射機制。動態代理中用到JDK動態代理和CGLIB代理。這兩者的區別是,JDK動態代理是接口的,CGLIB代理是對于類的。Mybatis中這兩種代理都用到過,Mapper中用到的是JDK動態代理,在延遲加載的時候用到CGLIB代理。

(1)構建SqlSessionFactory過程

SqlSessionFactory是Mybatis的核心類,主要功能時提供創建Mybatis的核心接口SqlSession,我們需要創建SqlSessionFactory,為此我們提供配置文件和相關參數。通過SqlSessionFactoryBuilder去構建。

首先通過org.apache.ibatis.builder.xml.XMLConfigBuilder解析配置的XML文件,讀取配置參數,并將讀取的數據存入這個org.apache.ibatis.session.Configuration類中。其次使用Configuration對象去創建SqlSessionFactory。

(2)構建Configuration

Configuration的作用;

1)讀取配置文件,包括基礎配置的XML文件和映射器的XML文件

2)初始化基礎配置,比如Mybatis的別名等,一些重要的類對象,例如,插件、映射器、ObjectFactory和typeHandler對象。

3)提供單例,為后續創建SqlSessionFactory服務并提供配置的參數。

4)執行一些重要的對象方法,初始化配置信息。

(3)映射器的內部組成

一般而言映射器有三部分組成,MappedStatement、SqlSource和BoundSql。

MappedStatement:它保存了一個映射器的節點(select|delete|update)。包括許多我們配置的SQL、SQL的id、緩存信息、resultMap、paramterType、resultType、languageDriver等重要配置信息。

SqlSource:提供BoundSql的地方,它是MappedStatement的一個屬性。是一個接口,主要作用是根據參數和其它的規則組裝SQL。

BoundSql:建立SQL和參數的地方。常用用用三個參數:SQL,parameterObject、parameterMappings。

(4)構建SqlSessionFactory

sqlsessionFactory=newSqlSessionFactoryBuilder().build(inputStream);

(5)SqlSession運行過程

SqlSession是一個接口,使用它并不復雜。我們構建SqlSessionFactory就可以輕松容易地拿到Sqlseesion了。

1)映射器的動態代理

Mapper映射是通過動態代理來實現的。映射器的xml命名空間對應的便是這個接口的全路徑,那么它根據全路徑和方法名便能夠綁定起來,通過動態代理技術,讓這個接口跑起來。

2)SqlSession下的四大對象

映射器其實就是一個動態代理對象,進入到了MapperMethod的execute方法。它經過簡單的判斷就進入了SqlSession的刪除、更新、插入和選擇等方法。

Mapper的執行其實就是通過Executor、StatementHandler、ParameterHandler和ResultHandler來完成數據操作和結果的返回。

Executor:執行器,由它來調度StatementHandler、Parameterhandler、ResultHandler等來執行對應的SQL。

StatementHandler:使用數據的Statement執行操作,它是四大對象的核心,起到承上啟下的作用。

ParameterHandler:用于SQL對參數的處理。

ResultHandler:進行最后數據集(ResultSet)的封裝返回處理。

1)執行器(Executor):它是一個真正執行Java和數據交互的地方。在Mybatis中有三種執行器。SIMPLE(簡單執行器,這是默認的)、REUSE(重用預處理語句)和Batch(執行重用語句和批量更新,它是針對批量專用的執行器)。

2)數據庫會話器(StatementHandler):專門來處理數據庫會話的。

3)參數處理器(ParameterHandler):對預編譯語句進行參數處理。

4)結果處理器(ResultSetHandler):組裝結果集的返回。

(5)總結

SqlSession是通過Executor創建StatementHandler來運行的,而StatementHandler要經過下面的三步。Prepared預編譯SQL、parametersize設置參數和query/update執行SQL。

其中parametersize是調用parameterHandler的方法去設置的,而參數是根據類型處理器typeHandler去處理。query/update方法通過resultHandler進行處理結果的封裝,如果是update語句,它就返回整數,否則它就通過typeHandler處理結果類型,然后用ObjectFactory提供的規則組裝對象,返回給調用者,這就是SqlSession執行的過程。

result接口詳解

ResultSet接口提供了一整套的定位方法這些可以在記錄集中定位的任意一行,具體有:publicbooleanabsolute(introw);該方法的作用是將記錄集中的某一行設定為當前行,亦即將數據庫游標移動到指定的行,參數row指定了目標行的行號,這是絕對的行號,由記錄集的第一行開始計算,不是相對的行號。

executeQuery()是干什么用的實現什么功能啊

使用JDBC連接數據庫需要四步,第一步加載驅動程序;

第二步,連接數據庫;

第三步,訪問數據庫;

第四步,執行查詢;其中在第四步執行查詢時,要用statement類的executeQuery()方法來下達select指令以查詢數據庫,executeQuery()方法會把數據庫響應的查詢結果存放在ResultSet類對象中供我們使用。即語句:

Stringsql="select*from"+tableName;ResultSetrs=s.executeQuery(sql);

beanhandler是什么

是ResultSetHandler接口的實現,負責將第一個ResultSet行轉換為JavaBean。這個類是線程安全的。

resultsetmetadata rsmd = rs.getmetadata;是什么意思

ResultSetMetaDatarsmt=rs.getMetaData();

得到結果集(rs)的結構,比如字段數、字段名等。

使用rs.getMetaData().getTableName(1))就可以返回表名

rs.getMetaData().getColumnCount()

取得列數

例子:

ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTABLE2");//得到查詢結果,一個數據集

ResultSetMetaDatarsmd=rs.getMetaData();

intnumberOfColumns=rsmd.getColumnCount();//得到數據集的列數

“Execute”,的作用是什么

“Execute”是JAVA語言的一種,作用是執行動態的SQL語句或非運行時創建的PL/SQL塊,動態創建和執行SQL語句。Execute語句的方法:方法executeQuery用于產生單個結果集的語句,例如SELECT語句。

被使用最多的執行SQL語句的方法是executeQuery。

這個方法被用來執行SELECT語句,它幾乎是使用最多的SQL語句。

方法executeUpdate用于執行INSERT、UPDATE或DELETE語句以及SQLDDL(數據定義語言)語句,例如CREATETABLE和DROPTABLE。

INSERT、UPDATE或DELETE語句的效果是修改表中零行或多行中的一列或多列。

executeUpdate的返回值是一個整數,指示受影響的行數(即更新計數)。

對于CREATETABLE或DROPTABLE等不操作行的語句,executeUpdate的返回值總為零。使用executeUpdate方法是因為在createTableCoffees中的SQL語句是DDL(數據定義語言)語句。創建表,改變表,刪除表都是DDL語句的例子,要用executeUpdate方法來執行。

你也可以從它的名字里看出,方法executeUpdate也被用于執行更新表SQL語句。

實際上,相對于創建表來說,executeUpdate用于更新表的時間更多,因為表只需要創建一次,但經常被更新。方法execute:用于執行返回多個結果集、多個更新計數或二者組合的語句。因為多數程序員不會需要該高級功能。execute方法應該僅在語句能返回多個ResultSet對象、多個更新計數或ResultSet對象與更新計數的組合時使用。

當執行某個已存儲過程或動態執行未知SQL字符串(即應用程序程序員在編譯時未知)時,有可能出現多個結果的情況,盡管這種情況很少見。

因為方法execute處理非常規情況,所以獲取其結果需要一些特殊處理并不足為怪。

例如,假定已知某個過程返回兩個結果集,則在使用方法execute執行該過程后,必須調用方法getResultSet獲得第一個結果集,然后調用適當的getXXX方法獲取其中的值。

要獲得第二個結果集,需要先調用getMoreResults方法,然后再調用getResultSet方法。

如果已知某個過程返回兩個更新計數,則首先調用方法getUpdateCount,然后調用getMoreResults,并再次調用getUpdateCount。

對于不知道返回內容,則情況更為復雜。

如果結果是ResultSet對象,則方法execute返回true;如果結果是Javaint,則返回false。如果返回int,則意味著結果是更新計數或執行的語句是DDL命令。在調用方法execute之后要做的第一件事情是調用getResultSet或getUpdateCount。

調用方法getResultSet可以獲得兩個或多個ResultSet對象中第一個對象;或調用方法getUpdateCount可以獲得兩個或多個更新計數中第一個更新計數的內容。豆瓣:https://www.douban.com