天天看点

接口测试从零开始5_教你如何使用ibatis

1、创建pojo类

  public classpingjia

  2、创建dao接口

  publicinterfaceipingjiadao

  3、使用ibatis编写实现类

  1)通过pom依赖引入ibatis包

<dependency>

     <groupid>com.ibatis</groupid>

     <artifactid>ibatis</artifactid>

     <version>2.3.4.726</version>

</dependency>

  2)编写实现类,引入ibatissqlmapclient和resource

importcom.ibatis.common.resources.resources;

importcom.ibatis.sqlmap.client.sqlmapclient;

importcom.ibatis.sqlmap.client.sqlmapclientbuilder;

  3)配置pojo类的ibatis配置文件pingjia.ibatis.xm

<?xmlversion="1.0"encoding="utf-8"?>

<sqlmapnamespace="pingjiadao">

  <!--命名空间,在此空间外要引用此空间的元素,则需要加上命名空间名-->

   <typealiasalias="pingjia"type="com.koubei.testlearnning.pojo.pingjia"/> 

   <!--实体别名, 如果有用到全名的地方,可以用别名代替,受命名空间约束-->

   <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>

   <!--结果集映射,-->

   <!--删除操作-->

       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">

   <!--动态sql:prepend表示链接关键字,property表示属性值-->

      <isnotnullprepend=" , "property="pingjiacontent">

             pingjiacontent=

              #excuteperson#

       </isnotnull>

          <isnotnullprepend=" , "property="storeid">

             storeid=#storeid#

          </isnotnull>

          <isnotnullprepend=" , "property="pingjiatype">

             pingjiatype

              =#pingjiatype#

          <isnotnullprepend=" , "property="pingjiadate">

             pingjiadate

              =#pingjiadate#

               </isnotnull>

      </dynamic>

       wherepingjiaid=#pingjiaid#

   </update>

   <selectid="getpingjialist"parameterclass="java.lang.string"resultmap="pingjia">

   <!--查询操作,插入语句入参通过parameterclass="类别名"来设定,可以设定类别名,也可以设定为map,

   也可以设定为ibatis支持的原生类型(比如string、int、long等,  map是最强大的入参方式,任何入参方式

   都可以转换为这种入参方式,因为ibatis仅接受一个入参,当几个参数分布在不同对象中的时候,将这些对象

   的属性(或者对象本身put)到map中,然后一次传递给sql语句-->

      sselect* frompingjiawhere storeid = #storeid#

   </select>

      <selectid="getgoodpingnum"parameterclass="java.lang.string">

      sselectcount(1) frompingjiawhere storeid = #storeid# andpingjiatype=1

      <selectid="getpingjianum"parameterclass="java.lang.string">

      sselectcount(1) frompingjiawhere storeid = #storeid#

</sqlmap>

 4)配置sqlmapconfig配置文件

<!doctypesqlmapconfig

<sqlmapconfig>

<propertiesresource="dbcpconfig.properties"/>

<settingscachemodelsenabled="false"enhancementenabled="true"lazyloadingenabled="false"errortracingenabled="true"maxrequests="400"maxsessions="40"

   maxtransactions="32"usestatementnamespaces="true"/>  

        <!--   

        1. cachemodelsenabled是否启动sqlmapclient上的缓存机制;  

        2. enhancementenabled是否针对pojo启用字节码增强机制以提升getter/setter的调用效能,  

               避免使用java reflect所带来的性能开销,同时也为lazy loading带来了极大的性能提升;  

        4. lazyloadingenabled是否启动延迟加载机制  

        5. maxrequests最大并发请求数(statement并发数)  

        5. maxtransactions最大并发事务  

        6. maxsessions最大session数,即当前最大允许的并发sqlmapclient数(介于maxrequests和maxtransactions之间)  

        7. usestatementnamespaces是否使用statement命名空间(为true时,需要追加命名空间)  

     -->

<transactionmanagertype="jdbc"> 

      <datasourcetype="simple">

            type属性:datasource节点的type属性指定了datasource的实现类型,指定了数据源的链接类型,也有3种类型(simple,dbcp,jndi)

                com.ibatis.sqlmap.engine.datasource.simpledatasourcefactory。  

            2. dbcp:基于apachedbcp连接池组件实现的datasource封装,当无容器提供datasource服务时,  

                建议使用该选项,对应ibatis实现类为com.ibatis.sqlmap.engine.datasource.dbcpdatasourcefactory。  

            3. jndi:使用j2ee容器提供的datasource实现,datasource将通过指定的jndi name从容器中获取。  

               对应ibatis实现类为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"/><!--连接被某个任务所允许占用的最大时间--> 

   <propertyname="timetowait"value="500"/><!--线程允许等待的最大时间--> 

       </datasource> 

   </transactionmanager> 

    <!--指定映射文件的位置,配置中可出现多个sqlmap节点,以指定项目内所有映射文件--> 

   <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)增删改查相关操作

@override

publicbooleaninsert(pingjia pingjia) {

   booleanflag =false;

   try{

       sqlmap.insert("pingjiadao.insert", pingjia);

        flag =true;

    }catch(sqlexception e) {

        e.printstacktrace();

    }

   returnflag;

本文出自seven的测试人生公众号最新内容请见作者的github页:http://qaseven.github.io/