接口測試從零開始5_教你如何使用ibatis
1、創(chuàng)建pojo類
public classPingJia
2、創(chuàng)建Dao接口
publicinterfaceIPingJiaDao
3、使用ibatis編寫實(shí)現(xiàn)類
1)通過pom依賴引入ibatis包
<dependency> |
2)編寫實(shí)現(xiàn)類,引入ibatisSqlMapClient和Resource
importcom.ibatis.common.resources.Resources; |
3)配置POJO類的IBatis配置文件pingjia.ibatis.xm
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEsqlMapPUBLIC"-//ibatis.apache.org//DTDSQLMap 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMapnamespace="PingJiaDao"> <!--命名空間,在此空間外要引用此空間的元素,則需要加上命名空間名--> <typeAliasalias="pingJia"type="com.koubei.testlearnning.pojo.PingJia"/> <!--實(shí)體別名, 如果有用到全名的地方,可以用別名代替,受命名空間約束--> <resultMapclass="com.koubei.testlearnning.pojo.PingJia"id="PingJia"> <resultcolumn="pingjiaid"property="pingJiaId"/> <resultcolumn="pingjiacontent"property="pingJiaContent"/> <resultcolumn="storeid"property="storeId"/> <resultcolumn="pingjiatype"property="pingJiaType"/> <resultcolumn="pingjiadate"property="pingJiaDate"/> </resultMap> <!--結(jié)果集映射,--> <deleteid="delete"parameterClass="java.lang.String"> <!--刪除操作--> delete frompingjiawherepingjiaid=#pingJiaId# </delete> <insertid="insert"parameterClass="pingJia"> <!--插入操作, 對于自增主鍵的表,插入可以不配置插入的主鍵列,否則是必須的--> insert intopingjia(pingjiaid,pingjiacontent,storeid, pingjiatype,pingjiadate) values(#pingJiaId#, #pingJiaContent#, #storeId#, #pingJiaType#,#pingJiaDate#) </insert> <updateid="update"> <!--更新操作--> update task_info <dynamicprepend="set"> <!--動態(tài)sql:prepend表示鏈接關(guān)鍵字,property表示屬性值--> <isNotNullprepend=" , "property="pingJiaContent"> pingjiacontent= #excutePerson# </isNotNull> <isNotNullprepend=" , "property="storeid"> storeid=#storeId# </isNotNull> <isNotNullprepend=" , "property="pingJiaType"> pingjiatype =#pingJiaType# </isNotNull> <isNotNullprepend=" , "property="pingjiadate"> pingjiadate =#pingJiaDate# </isNotNull> </dynamic> wherepingjiaid=#pingJiaId# </update> <selectid="getPingJiaList"parameterClass="java.lang.String"resultMap="PingJia"> <!--查詢操作,插入語句入?yún)⑼ㄟ^parameterClass="類別名"來設(shè)定,可以設(shè)定類別名,也可以設(shè)定為map, 也可以設(shè)定為iBatis支持的原生類型(比如string、int、long等, map是最強(qiáng)大的入?yún)⒎绞剑魏稳雲(yún)⒎绞?/span> 都可以轉(zhuǎn)換為這種入?yún)⒎绞剑驗(yàn)?/span>iBatis僅接受一個(gè)入?yún)ⅲ?dāng)幾個(gè)參數(shù)分布在不同對象中的時(shí)候,將這些對象 的屬性(或者對象本身put)到map中,然后一次傳遞給sql語句--> sselect* frompingjiawhere storeId = #storeId# </select> <selectid="getGoodPingNum"parameterClass="java.lang.String"> sselectcount(1) frompingjiawhere storeId = #storeId# andpingjiatype=1 </select> <selectid="getPingJiaNum"parameterClass="java.lang.String"> sselectcount(1) frompingjiawhere storeId = #storeId# </select> </sqlMap> |
4)配置SqlMapConfig配置文件
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEsqlMapConfig PUBLIC"-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <propertiesresource="dbcpconfig.properties"/> <settingscacheModelsEnabled="false"enhancementEnabled="true"lazyLoadingEnabled="false"errorTracingEnabled="true"maxRequests="400"maxSessions="40" maxTransactions="32"useStatementNamespaces="true"/> <!-- 1. cacheModelsEnabled是否啟動sqlMapClient上的緩存機(jī)制; 2. enhancementEnabled是否針對POJO啟用字節(jié)碼增強(qiáng)機(jī)制以提升getter/setter的調(diào)用效能, 避免使用Java Reflect所帶來的性能開銷,同時(shí)也為Lazy Loading帶來了極大的性能提升; 3. errorTracingEnabled是否啟用錯(cuò)誤日志;在開發(fā)期間建議設(shè)為“true”以方便調(diào)試 4. lazyLoadingEnabled是否啟動延遲加載機(jī)制 5. maxRequests最大并發(fā)請求數(shù)(Statement并發(fā)數(shù)) 5. maxTransactions最大并發(fā)事務(wù) 6. maxSessions最大Session數(shù),即當(dāng)前最大允許的并發(fā)sqlMapClient數(shù)(介于maxRequests和maxTransactions之間) 7. useStatementNamespaces是否使用Statement命名空間(為true時(shí),需要追加命名空間) --> <transactionManagertype="JDBC"> <dataSourcetype="SIMPLE"> <!--dataSource從屬于transactionManager節(jié)點(diǎn),用于設(shè)定ibatis運(yùn)行期使用的DataSource屬性 type屬性:dataSource節(jié)點(diǎn)的type屬性指定了dataSource的實(shí)現(xiàn)類型,指定了數(shù)據(jù)源的鏈接類型,也有3種類型(SIMPLE,DBCP,JNDI) 1. SIMPLE: SIMPLE是ibatis內(nèi)置的dataSource實(shí)現(xiàn),其中實(shí)現(xiàn)了一個(gè)簡單的數(shù)據(jù)庫連接池機(jī)制,對應(yīng)ibatis實(shí)現(xiàn)類為 com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。 2. DBCP:基于ApacheDBCP連接池組件實(shí)現(xiàn)的DataSource封裝,當(dāng)無容器提供DataSource服務(wù)時(shí), 建議使用該選項(xiàng),對應(yīng)ibatis實(shí)現(xiàn)類為com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。 3. JNDI:使用J2EE容器提供的DataSource實(shí)現(xiàn),DataSource將通過指定的JNDI Name從容器中獲取。 對應(yīng)ibatis實(shí)現(xiàn)類為com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。 --> <propertyname="JDBC.Driver"value="${driverClassName}"/> <propertyname="JDBC.ConnectionURL"value="${url}"/> <propertyname="JDBC.Username"value="${username}"/> <propertyname="JDBC.Password"value="${password}"/> <propertyname="Pool.MaximumActiveConnections"value="10"/><!--連接池維持的最大容量--> <propertyname="Pool.MaximumIdleConnections"value="5"/><!--連接池允許掛起的最大連接--> <propertyname="Pool.MaximumCheckoutTime"value="120000"/><!--連接被某個(gè)任務(wù)所允許占用的最大時(shí)間--> <propertyname="TimeToWait"value="500"/><!--線程允許等待的最大時(shí)間--> </dataSource> </transactionManager> <!--指定映射文件的位置,配置中可出現(xiàn)多個(gè)sqlMap節(jié)點(diǎn),以指定項(xiàng)目內(nèi)所有映射文件--> <sqlMapresource="conf/sqlmap/pingjia.ibatis.xml"/> </sqlMapConfig> |
5)讀取配置文件
static{ try{ Reader reader = Resources.getResourceAsReader("conf/testlearnning.sqlmapconfig.xml"); sqlMap= SqlMapClientBuilder.buildSqlMapClient(reader); }catch(Exception e) { e.printStackTrace(); } |
6)增刪改查相關(guān)操作
@Override publicbooleaninsert(PingJia pingJia) { booleanflag =false; try{ sqlMap.insert("PingJiaDao.insert", pingJia); flag =true; }catch(SQLException e) { e.printStackTrace(); } returnflag; } |