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

  1. 云栖社区>
  2. seven的测试人生>
  3. 博客>
  4. 正文

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

寒凝雪 2017-07-03 11:07:00 浏览694
展开阅读全文

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)编写实现类,引入ibatisSqlMapClientResource

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

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

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

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

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

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

   <!--动态sqlprepend表示链接关键字,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">

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

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

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

   的属性(或者对象本身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上的缓存机制;  

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

               避免使用Java Reflect所带来的性能开销,同时也为Lazy Loading带来了极大的性能提升;  

        3. errorTracingEnabled是否启用错误日志;在开发期间建议设为“true”以方便调试  

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

        5. maxRequests最大并发请求数(Statement并发数)  

        5. maxTransactions最大并发事务  

        6. maxSessions最大Session数,即当前最大允许的并发sqlMapClient数(介于maxRequestsmaxTransactions之间)  

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

     -->

<transactionManagertype="JDBC"> 

      <dataSourcetype="SIMPLE">

      <!--dataSource从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性  

            type属性:dataSource节点的type属性指定了dataSource的实现类型,指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI)

            1. SIMPLE   SIMPLEibatis内置的dataSource实现,其中实现了一个简单的数据库连接池机制,对应ibatis实现类为  

                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/

网友评论

登录后评论
0/500
评论
寒凝雪
+ 关注
所属团队号: seven的测试人生