我是一个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;
}
}
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;
}
}
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”); ”试试
数据库和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>
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>