1、SqlMapClient对象SqlMapClient对象这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。这个类是我们使用iBATIS的最主要的类。它是线程安全的。通常,将它定义为单例。(与hibernate中sessionFactory的定义类似)。如:import java.io.Reader;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;pu
2、blic class IbatisSQLMapConfig private static final SqlMapClient sqlMap; /在静态区块中初试化返回 static try /声明配置文件的名称(映射文件被定义在其中) String resource = sql_map_config.xml; /利用工具类Resources来读取到配置文件 Reader reader = Resources.getResourceAsReader(resource); /创建SqlMapClient接口的变量实例 sqlMap = SqlMapClientBuilder.buildSqlMa
3、pClient(reader); catch (Exception e) e.printStackTrace(); throw new RuntimeException( Error initializing MyAppSqlConfig class. Cause: + e); public static SqlMapClient getSqlMapInstance() /提供静态方法返回静态区块中得到的SqlMapClient return sqlMap; 主要用法:如何获得刚插入记录的自增长ID值?以下所有虚线上面代表User.xml中的内容,虚线下方是测试类中的内容:User类沿用上一篇
4、中的User类insert into t_user values ( null,#username#,#password#) SELECT IDENTITY AS ID User user = new User(); user.setUsername(张三); user.setPassword(张三密码); /如果主键是自动生成的,则其返回值可以通过标签来设置 /如果不通过标签来设置,则返回值为空! /中的keyProperty,是指定User中的id属性,当调用结束之后, /user对象的id值和insert方法的返回值都是这条记录的ID值! Object obj= sqlMapper.in
5、sert(insertUser, user);parameterClass的使用insert into t_user values ( null,#username#,#password#) SELECT IDENTITY AS IDinsert into t_user values ( null,#username#,#password#) SELECT IDENTITY AS IDinsertUser使用了parameterClass,所以必需传入User类型的对象 User user = new User(); user.setUsername(张三); user.setPassword
6、(张三密码); /传递进去的对象,必须是User类型 Object obj= sqlMapper.insert(insertUser, user);insertUser2没有使用parameterClass,所以可以传入任意具有相应属性值的对象 JustAnObject anobj = new JustAnObject(); anobj.setUsername(用户名); anobj.setPassword(用户密码); /如果没有指定parameterClass属性,则任何一个具有相应属性值 /的对象都可以被传递进去 Object obj= sqlMapper.insert(insertUs
7、er2, anobj);parameterMap的使用insert into t_user values ( null,?,?) SELECT IDENTITY AS IDparameterMap用于传入参数,以便匹配SQL语句中的?号 User user = new User(); user.setUsername(张三dd); user.setPassword(张三密码dd); Object obj= sqlMapper.insert(insertUser, user);利用parameterMap,可以定义参数对象的属性如何映射到SQL查询语句的动态参数上,注意parameterMap中
8、标签的先后顺序不能颠倒!如何将查询结果映射到不同的对象?(resultClass的使用)package com.ibatis.model;publicclassOtherObject privateintid; private String prop1; private String prop2; publicint getId() returnid; publicvoid setId(int id) this.id = id; public String getProp1() return Prop1; publicvoid set Prop1 (String Prop1) this. Pr
9、op1 = Prop1; public String getProp2() returnusername; publicvoid setProp2 (String Prop2) this.Prop2 = Prop2; select username as prop1,password as prop2from t_user where id=#value# /查找t_user表,将其结果映射到一个属性名不同的对象中! OtherObject obj = (OtherObject)sqlMapper.queryForObject(selectUserForOtherObject, 1); Sys
10、tem.out.println(obj.getProp1()+,+obj.getProp2();如何将查询结果集映射到不同的对象?(resultMap的基本使用) select username, password from t_user where id=#value# /查找t_user表,将其结果映射到一个属性名不同的对象中! OtherObject obj = (OtherObject)sqlMapper.queryForObject(selectUserForOtherObject2, 17); System.out.println(obj.getProp1()+,+obj.getP
11、rop2();如何将查询结果集映射为xml格式的数据?select * from t_user where id=#value#select * from t_user /查找t_user表,将其结果映射到xml! /返回值是xml形式的字符串 Object obj = (Object)sqlMapper.queryForObject(selectXmlData, 1); System.out.println(obj); /查找t_user表,将其结果映射到xml! List list = (List)sqlMapper.queryForList(selectXmlDatas); System
12、.out.println(list);如何用Map类型的对象作为传入参数?insert into t_user values ( null,#username#,#password#) Map user = new TreeMap(); user.put(username, Map用户); user.put(password, Map用户密码); sqlMapper.insert(insertUser,user);如何将查询结果集的元素转换为Map类型的对象?select * from t_user List list = (List)sqlMapper.queryForList(select
13、MapUsers); System.out.println(list); for (Iterator iter = list.iterator(); iter.hasNext();) Map map = (Map) iter.next(); /可在此输出map的数据 事务处理可以使用sqlMapClient的startTransaction/commitTransaction/endTransaction等方法来控制事务的边界。如果与spring整合(这是iBatis推荐的方式),则我们需要在spring配置文件中指定其事务特性。其他写法:SqlMapConfig.xmlXML code!DO
14、CTYPE sqlMapConfig PUBLIC -/iBATIS.com/DTD SQL Map Config 2.0/EN 在xml文件中有以下几类字符要进行转义替换:<大于号&&和'单引号"双引号ibatis多个参数的查询1)用 MapSELECT count(*) AS value FROM userinfo WHERE uid=#uid# and pwd=#pwd#这种办法显得要清楚的很多,也不需要自己手动编写sql到java之中。Map map=new HashMap();map.put(uid, username);map.put(pwd, password);Integer r = (Integer) sqlMap.queryForObject(checkLogin2, map);在java中首先生成需要的map,然后作为输入参数传入即可。这个方法应该是比较好的,值得推荐。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1