SqlMapClient对象.docx
- 文档编号:6132615
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:10
- 大小:19.01KB
SqlMapClient对象.docx
《SqlMapClient对象.docx》由会员分享,可在线阅读,更多相关《SqlMapClient对象.docx(10页珍藏版)》请在冰豆网上搜索。
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("张三密码");
//如果主键是自动生成的,则其返回值可以通过
//如果不通过
//
//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,然后作为输入参数传入即可。 这个方法应该是比较好的,值得推荐。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SqlMapClient 对象