SqlMapClient对象.docx

上传人:b****5 文档编号:6132615 上传时间:2023-01-04 格式:DOCX 页数:10 大小:19.01KB
下载 相关 举报
SqlMapClient对象.docx_第1页
第1页 / 共10页
SqlMapClient对象.docx_第2页
第2页 / 共10页
SqlMapClient对象.docx_第3页
第3页 / 共10页
SqlMapClient对象.docx_第4页
第4页 / 共10页
SqlMapClient对象.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

SqlMapClient对象.docx

《SqlMapClient对象.docx》由会员分享,可在线阅读,更多相关《SqlMapClient对象.docx(10页珍藏版)》请在冰豆网上搜索。

SqlMapClient对象.docx

SqlMapClient对象

SqlMapClient对象

这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。

这个类是我们使用iBATIS的最主要的类。

它是线程安全的。

通常,将它定义为单例。

(与hibernate中sessionFactory的定义类似)。

如:

importjava.io.Reader;

importmon.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

publicclassIbatisSQLMapConfig{

   privatestaticfinalSqlMapClientsqlMap;

   //在静态区块中初试化返回

   static{

       try{

           //声明配置文件的名称(映射文件被定义在其中)

           Stringresource="sql_map_config.xml";

           //利用工具类Resources来读取到配置文件

           Readerreader=Resources.getResourceAsReader(resource);

           //创建SqlMapClient接口的变量实例

           sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);

       }catch(Exceptione){

           e.printStackTrace();

           thrownewRuntimeException(

                   "ErrorinitializingMyAppSqlConfigclass.Cause:

"+e);

       }

   }

   publicstaticSqlMapClientgetSqlMapInstance(){

       //提供静态方法返回静态区块中得到的SqlMapClient

       returnsqlMap;

   }

}

主要用法:

如何获得刚插入记录的自增长ID值?

以下所有虚线上面代表User.xml中的内容,虚线下方是测试类中的内容:

User类沿用上一篇中的User类

 

  insertintot_uservalues(

      null,#username#,#password#

  )

  

      SELECT@@IDENTITYASID

   

 

      Useruser=newUser();

      user.setUsername("张三");

      user.setPassword("张三密码");

      

      //如果主键是自动生成的,则其返回值可以通过标签来设置

      //如果不通过标签来设置,则返回值为空!

      //中的keyProperty,是指定User中的id属性,当调用结束之后,

      //user对象的id值和insert方法的返回值都是这条记录的ID值!

      Objectobj =sqlMapper.insert("insertUser",user);

parameterClass的使用

 

  insertintot_uservalues(

      null,#username#,#password#

  )

  

      SELECT@@IDENTITYASID

   

 

 

 

  insertintot_uservalues(

      null,#username#,#password#

  )

  

      SELECT@@IDENTITYASID

   

 

insertUser使用了parameterClass,所以必需传入User类型的对象

      Useruser=newUser();

      user.setUsername("张三");

      user.setPassword("张三密码");

      

      //传递进去的对象,必须是User类型

      Objectobj =sqlMapper.insert("insertUser",user);

insertUser2没有使用parameterClass,所以可以传入任意具有相应属性值的对象

      JustAnObjectanobj=newJustAnObject();

      anobj.setUsername("用户名");

      anobj.setPassword("用户密码");

      

      //如果没有指定parameterClass属性,则任何一个具有相应属性值

      //的对象都可以被传递进去

      Objectobj =sqlMapper.insert("insertUser2",anobj);

parameterMap的使用

 

  

  

 

 

  insertintot_uservalues(

      null,?

?

  )

  

      SELECT@@IDENTITYASID

   

 

parameterMap用于传入参数,以便匹配SQL语句中的?

      Useruser=newUser();

      user.setUsername("张三dd");

      user.setPassword("张三密码dd");

      

      Objectobj =sqlMapper.insert("insertUser",user);

利用parameterMap,可以定义参数对象的属性如何映射到SQL查询语句的动态参数上,注意parameterMap中标签的先后顺序不能颠倒!

如何将查询结果映射到不同的对象?

(resultClass的使用)

packagecom.ibatis.model;

publicclassOtherObject{

   privateintid;

   privateStringprop1;

   privateStringprop2;

   

   publicintgetId(){

      returnid;

   }

   publicvoidsetId(intid){

      this.id=id;

   }

   publicStringgetProp1(){

      returnProp1;

   }

   publicvoidsetProp1(StringProp1){

      this.Prop1=Prop1;

   }

   publicStringgetProp2(){

      returnusername;

   }

   publicvoidsetProp2(StringProp2){

      this.Prop2=Prop2;

   }

}

 

  select

  usernameasprop1,

  passwordasprop2

  fromt_userwhereid=#value#

 

      //查找t_user表,将其结果映射到一个属性名不同的对象中!

      OtherObjectobj=(OtherObject)sqlMapper.queryForObject("selectUserForOtherObject",1);

      System.out.println(obj.getProp1()+","+obj.getProp2());

如何将查询结果集映射到不同的对象?

(resultMap的基本使用)

 

  

  

 

 

--

 如果使用resultMap来定义如何映射,则如下语句不可写成:

 selectusernameasprop1,passwordasprop2....

 -->

 

     select

     username,

     password

     fromt_userwhereid=#value#

 

      //查找t_user表,将其结果映射到一个属性名不同的对象中!

      OtherObjectobj=(OtherObject)sqlMapper.queryForObject("selectUserForOtherObject2",17);

      System.out.println(obj.getProp1()+","+obj.getProp2());

如何将查询结果集映射为xml格式的数据?

 

  select*fromt_userwhereid=#value#

 

 

  select*fromt_user

 

      //查找t_user表,将其结果映射到xml!

      //返回值是xml形式的字符串

      Objectobj=(Object)sqlMapper.queryForObject("selectXmlData",1);

      System.out.println(obj);

      //查找t_user表,将其结果映射到xml!

      Listlist =(List)sqlMapper.queryForList("selectXmlDatas");

      System.out.println(list);

如何用Map类型的对象作为传入参数?

 

--

 这里,可以使用全路径类名,如:

 java.util.Map

 java.util.HashMap

 java.util.TreeMap

 或

 map

 -->

 

  insertintot_uservalues(

      null,#username#,#password#

  )

 

      Mapuser=newTreeMap();

      user.put("username","Map用户");

      user.put("password","Map用户密码");

      sqlMapper.insert("insertUser",user);

如何将查询结果集的元素转换为Map类型的对象?

 

--

 resultClass可以定义为java.util.HashMap类型,

 将能自动转换

 -->

 

  select*fromt_user

 

      Listlist=(List)sqlMapper.queryForList("selectMapUsers");

      System.out.println(list);

      for(Iteratoriter=list.iterator();iter.hasNext();){

          Mapmap=(Map)iter.next();

          //可在此输出map的数据

      }

事务处理

可以使用sqlMapClient的startTransaction/commitTransaction/endTransaction等方法来控制事务的边界。

如果与spring整合(这是iBatis推荐的方式),则我们需要在spring配置文件中指定其事务特性。

其他写法:

SqlMapConfig.xml  

XMLcode

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEsqlMapConfigPUBLIC"-//iBATIS.com//DTDSQLMapConfig2.0//EN"

"

--AlwaysensuretousethecorrectXMLheaderasabove!

-->

cacheModelsEnabled="true"

enhancementEnabled="true"

lazyLoadingEnabled="true"

maxRequests="32"

maxSessions="10"

maxTransactions="5"

useStatementNamespaces="false"

/>

 

在xml文件中有以下几类字符要进行转义替换:

<

<

小于号

>

>

大于号

&

&

'

'

单引号

"

"

双引号

ibatis 多个参数的查询

1)用Map

SELECTcount(*)ASvalueFROMuserinfoWHEREuid=#uid#andpwd=#pwd#

这种办法显得要清楚的很多,也不需要自己手动编写sql到java之中。

Mapmap=newHashMap();

map.put("uid",username);

map.put("pwd",password);

Integerr=(Integer)sqlMap.queryForObject("checkLogin2",map);

在java中首先生成需要的map,然后作为输入参数传入即可。

这个方法应该是比较好的,值得推荐。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1