我是一个iBatis初学者,今天看了API,照着例子写了个程序如下:
  JAVA中是这样写的
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.Reader;
      
Reader reader = Resources.getResourceAsReader("/zhao/tool/SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
userName="admin";sqlMap.startTransaction();
Map map = Map map = sqlMap.queryForMap("getUserMap", userName,userName);
System.out.println(map);输出的结果是
{null={age=23, name=admin, userName=admin, passWord=123456}}
为什么key的值是null呢?sqlMap.xml如下<resultMap id="get-user-map" class="java.util.HashMap">
<result property="userName" column="username"/>
<result property="passWord" column="password"/>
<result property="name" column="name_all"/>
<result property="age" column="age"/>
</resultMap>
<select id="getUserMap" parameterClass="String" resultMap="get-user-map">
select * from myuser where username=#value#
</select>数据库是这样建的:
create table myuser
(
username varchar2(20) primary key,
password varchar2(20),
name_all varchar2(20),
age varchar2(2)
);
insert into myuser values('admin','123456','admin,'23');User.java是这样的:
public class User { private String userName;
private String passWord;
private String name;
private String age;

public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}

解决方案 »

  1.   

    queryForMap   
      public   java.util.Map   queryForMap(java.lang.String   id,   
                                                                        java.lang.Object   parameterObject,   
                                                                        java.lang.String   keyProp)   
                                                          throws   java.sql.SQLExceptionExecutes   a   mapped   SQL   SELECT   statement   that   returns   data   to   populate   a   number   of   result   objects   that   will   be   keyed   into   a   Map.     
      The   parameter   object   is   generally   used   to   supply   the   input   data   for   the   WHERE   clause   parameter(s)   of   the   SELECT   statement.     
        
        
      Parameters:   
      id   -   The   name   of   the   statement   to   execute.   
      parameterObject   -   The   parameter   object   (e.g.   JavaBean,   Map,   XML   etc.).   
      keyProp   -   The   property   to   be   used   as   the   key   in   the   Map.     
      Returns:   
      A   Map   keyed   by   keyProp   with   values   being   the   result   object   instance.     
      第一个参数是在XML中定义的查询操作的id,   比如像"getProductList".   
      第二个参数是作为参数的对象,   应该是和queryForList的那个参数意义相同.   
      第三个参数是最终要返回的Map的Key,   比如像"productCode".   
      通俗一点说就是queryForList返回满足条件的一个列表,   而queryForMap首先也是返回一个列表,   再把这个列表每个元素都加上了一个唯一的字段作为key,   然后返回这个map
        你尝试将“Map map = Map map = sqlMap.queryForMap("getUserMap", userName,userName); ”该成“Map map = Map map = sqlMap.queryForMap("getUserMap", userName,“username”); ”试试
      

  2.   

    总结上面的代码
    数据库和User.java方面没有改变。
    其他地方都有修改
    import com.ibatis.sqlmap.client.SqlMapClient; 
    import com.ibatis.sqlmap.client.SqlMapClientBuilder; 
    import java.io.Reader; 
          
    Reader reader = Resources.getResourceAsReader("/zhao/tool/SqlMapConfig.xml"); 
    SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); 
    userName="admin"; sqlMap.startTransaction(); 
    Map map = sqlMap.queryForMap("getUserMap", userName,"userName"); 
    user = (User)map.get(userName);
    获取到user。<resultMap id="get-user-map" class="user"> //user为User类的别名
    <result property="userName" column="username"/>
    <result property="passWord" column="password"/>
    <result property="name" column="name_all"/>
    <result property="age" column="age"/>
    </resultMap>
    的resultMap中的class为user了<select id="getUserMap" parameterClass="String" resultMap="get-user-map">
    select * from myuser where username=#value#
    </select>
      

  3.   


    import com.ibatis.sqlmap.client.SqlMapClient;  
    import com.ibatis.sqlmap.client.SqlMapClientBuilder;  
    import java.io.Reader;  
        
    Reader reader = Resources.getResourceAsReader("/zhao/tool/SqlMapConfig.xml");  
    SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);  
    userName="admin";  sqlMap.startTransaction();  
    Map map = sqlMap.queryForMap("getUserMap", userName,"userName");  
    user = (User)map.get(userName);<resultMap id="get-user-map" class="user"> //user为User类的别名
    <result property="userName" column="username"/>
    <result property="passWord" column="password"/>
    <result property="name" column="name_all"/>
    <result property="age" column="age"/>
    </resultMap><select id="getUserMap" parameterClass="String" resultMap="get-user-map">
    select * from myuser where username=#value#
    </select>