ibatis的queryForMap方法的使用与实现

在ibatis的使用过程中,一般用到queryForList方法比较多,而queryForMap用得比较少,但是queryForMap确实是一个比较重要的用法。queryForMap可将查询结果封装为一个map。

假设有一张t_product表,含有id, name两个字段。

step1:首先,必须在放置查询sql的xml配置文件中配置resultMap:

Xml代码  

  1. <resultMap id="nameMap" class="java.util.HashMap">
  2. <result property="id" column="ID"  javaType="java.lang.Integer"/>
  3. <result property="name" column="Name" javaType="java.lang.String"/>
  4. </resultMap>

(注:必须写成java.util.HashMap而不是jav.util.Map)

这步配置是为了将map的属性和数据表的字段对应上!至于map的key和value则由后面调用查询sql的重载方法的参数来指定!

查询的sql:

Xml代码  

  1. <select id="getProductMap" parameterClass="java.lang.String" resultMap="nameMap">
  2. SELECT id id, name name
  3. FROM  PRODUCT_PACKAGE
  4. </select>

step2:daoImpl调用查询接口

方式一:用三个参数:

Map queryForMap(String paramString1, Object paramObject, String paramString2)

Java代码  

  1. public Map<Integer,String> getProductMap()throws DatabaseException{
  2. return getSqlMapClientTemplate().queryForMap("sqlMap.getProductMap","","id");
  3. }

参数一:查询入口,应和getProductMap对应。

参数二:入参

参数三:当做map的key

得到结果(举例):

{1={id=1, name=红酒拉菲}, 2={id=2, name=书本}, 3={id=3, name=水果}}

方式二:用四个参数

Map queryForMap(String paramString1, Object paramObject, String paramString2, String paramString3)

Java代码  

  1. public Map<Integer,String> getProductMap() throws DatabaseException {
  2. return getSqlMapClientTemplate().queryForMap("sqlMap.getPackageMap","","id","name");
  3. }

参数一:查询入口,应和getProductMap对应。

参数二:入参

参数三:当做map的key

参数四:当做map的value

得到结果(举例):

{1=红酒拉菲, 2=书本, 3=水果}

通过查询这两个重载方法的底层API,他们的区别即可一目了然:

1)三个参数:

Java代码  

  1. public Map queryForMap(String paramString1, Object paramObject, String paramString2)
  2. throws DataAccessException
  3. {
  4. return executeWithMapResult(new SqlMapClientCallback() { private final String val$statementName;
  5. private final Object val$parameterObject;
  6. private final String val$keyProperty;
  7. public Object doInSqlMapClient(SqlMapExecutor paramAnonymousSqlMapExecutor) throws SQLException { return paramAnonymousSqlMapExecutor.queryForMap(this.val$statementName, this.val$parameterObject, this.val$keyProperty); }
  8. });
  9. }

2)四个参数:

Java代码  

  1. public Map queryForMap(String paramString1, Object paramObject, String paramString2, String paramString3)
  2. throws DataAccessException
  3. {
  4. return executeWithMapResult(new SqlMapClientCallback() { private final String val$statementName;
  5. private final Object val$parameterObject;
  6. private final String val$keyProperty;
  7. private final String val$valueProperty;
  8. public Object doInSqlMapClient(SqlMapExecutor paramAnonymousSqlMapExecutor) throws SQLException { return paramAnonymousSqlMapExecutor.queryForMap(this.val$statementName, this.val$parameterObject, this.val$keyProperty, this.val$valueProperty); } } );
  9. }
时间: 2024-10-04 00:09:09

ibatis的queryForMap方法的使用与实现的相关文章

ibatis框架的sqlmapclient接口

SqlMapClient,是iBatis中的重要接口,这个接口涉及到对SQL映射的执行和批处理. 现在,就先了解它的对query开头方法的定义. 首先是 queryForList 方法: //指定SQL的ID,执行的结果返回ListqueryForList(java.lang.String id) ; //指定SQL的ID,并指定返回的行数queryForList(java.lang.String id, int skip, int max) ; //指定SQL的ID,并指定传入参数queryF

JdbcTemplate queryForMap EmptyResultDataAccessException

JdbcTemplate的queryForMap方法报错 queryForMap方法使用不当,就会出错,使用方式如下: The queryForMap method in JdbcTemplate only expects a single row to be returned, The return value for this method will be a map of column names to column values for the single result row. qu

给HashMap排序,使之成为有序Map

如何给HashMap中的值排序?这个问题很多人都遇到过,很常见的一个方案是使用LinkedHashMap,因为LinkedHashMap可以记住元素放入的顺序,可以认为是真正的“有序”(想让HashMap有序是不可能的),我比较喜欢.然而问题是往往数据已经封装在了HashMap中,我们必须手动的排序后再放入LinkedHashMap,这当然也就成了思路,代码实现起来也很简单,写出来看起来还挺舒服的,顺手记一下: Map<String,String> myMapTmp = XXDao().get

Mybatis动态建表

在网上查了很多,都说Mybatis不支持动态建表,心凉了一节.还好找到这么一篇,找到了希望:http://www.zzzyk.com/show/ec5660d9cf1071b3.htm 经过在mysql环境下验证,确实可用,不知道其他数据库是否支持,如下: Mapper.xml <update id="createNewTable"> create table `${realTableName}`( `id` int(11) NOT NULL AUTO_INCREMENT,

string中执行sql语句

Spring(JdbcTemplate.class)中的queryForMap().queryForObject().queryForLong().queryForInt()等方法都会去调用public static Object requiredSingleResult(Collection results) throws IncorrectResultSizeDataAccessException这个方法(DataAccessUtils.class),此方法中会判断得到的结果集Collect

Java API 快速速查宝典

在该页面可以直接通过快捷键  ctrl+f 来查找该单词.快速帮助我们获取到该API的基本介绍及其作用. 第1章 字符串 1 1.1 charAt方法——提取指定字符 11.2 codePointAt方法——提取索引字符代码点 11.3 codePointBefore方法——获取索引前一个字符的代码点 21.4 codePointCount方法——获取指定范围文本代码点数 21.5 compareTo方法——比较两个字符串 31.6 compareToIgnoreCase方法——忽略大小写比较字

JdbcTemplate查询数据 三种callback之间的区别

JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选用不同的模板方法. 如果你的查询很简单,仅仅是传入相应SQL或者相关参数,然后取得一个单一的结果,那么你可以选择如下一组便利的模板方法: int queryForInt(String sql) int queryForInt(String sql, Object[] args) long queryForLong(String sql) long queryForLong(String sql, Object[] ar

3、MyBatis.Net学习笔记之增删改

增删改之前先说一下笔记1里提到的一个无法创建ISqlMapper对象的问题. <resultMaps> <resultMap id="FullResultMap" class="TUSER"> <result property="UID" column="U_ID" dbType="Int"/> <result property="UName"

SpringBoot使用JdbcTemplate

前言 本文是对SpringBoot使用JdbcTemplate操作数据库的一个介绍,,提供一个小的Demo供大家参考. 操作数据库的方式有很多,本文介绍使用SpringBoot结合JdbcTemplate. 新建项目 新建一个项目.pom文件中加入Jdbc依赖,完整pom如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO