欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

parameterMap的应用

程序员文章站 2024-03-24 12:03:16
...

ibatis中的parameterMap的应用

在上篇文章中我们介绍了用ibatis实现了基本的增,删,改,查的功能,今天我们要介绍的是ibatis中的parameterMap的应用,我们结合具体的实例来讲解。(我们只是在上篇文章中的例题中新添一些内容,下面列出的是新添的内容)

1.映射配置(person.xml)

 

<!-- 测试parameterMap-->
	<parameterMap class="java.util.Map" id="query_some_param">
		<parameter property="firstName" javaType="java.lang.String" jdbcType="VARCHAR"/>
		<parameter property="lastName" javaType="java.lang.String" jdbcType="VARCHAR"/>
	</parameterMap>
	
	<select id="querySome" resultClass="Person" parameterMap="query_some_param">
		<![CDATA[
			select * from person where firstName =? and lastName=?
		]]>
	</select>

 

2.Dao(personDao.java)

public Map querySome(Map map, String key){
		return getSqlMapClientTemplate().queryForMap("person.querySome", map, key);
	}

 

3.Service

  (1)Service接口(IPersonService)

public Map querySome(Map map, String key);


 (2)Service实现类(PersonService)

 

public Map querySome(Map map, String key) {
		return personDao.querySome(map, key);
	}

 

4.Action(PersonAction)

 

public String querySome(){
		System.out.println("Enter into.........");
		Map map = new HashMap();
		map.put("firstName", "英");
		map.put("lastName", "黄");
		Map result = getPersonService().querySome(map, "id");
		for(Iterator it=result.keySet().iterator(); it.hasNext();){
			Integer pId = (Integer)it.next();
			Person pObject = (Person)result.get(pId);
			System.out.println("************************************");
			System.out.println("firstName"+pObject.getFirstName());
			System.out.println("lastName"+pObject.getLastName());
			System.out.println("birthDate"+pObject.getBirthDate());
			System.out.println("weight"+pObject.getWeight());
			System.out.println("height"+pObject.getHeight());
			System.out.println("************************************");
		}
		System.out.println("result.size():"+result.size());
		return null;
	}

 

针对以上这个例题,我的数据库的数据如下:

id   firstName   lastName   birthDate                   weight        height

3    映容           江            1984-08-21 00:00:00    45             160
4    英              黄            1988-09-20 00:00:00    40             160
5    萧英           李            1988-09-13 00:00:00    60             168
6    英              黄            1985-08-20 14:49:20    90             179
7    英              黄            2009-09-03 14:50:16    4               50

 

输出的结果如下:

************************************
firstName英
lastName黄
birthDateTue Sep 20 00:00:00 CST 1988
weight40.0
height160.0
************************************
************************************
firstName英
lastName黄
birthDateTue Aug 20 14:49:20 CST 1985
weight90.0
height179.0
************************************
************************************
firstName英
lastName黄
birthDateThu Sep 03 14:50:16 CST 2009
weight4.0
height50.0
************************************
result.size():3

 

在我们写

<select id="querySome" resultClass="Person" parameterMap="query_some_param">
<![CDATA[
select * from person where firstName =? and lastName=?
]]>
</select>

 

这段代码时,一定要写占位符"?",如果不用,而是写成如下这样

<select id="querySome" resultClass="Person" parameterMap="query_some_param">
  <![CDATA[
   select * from person where firstName like '%$firstName$%' and lastName like '%$lastName$%'
  ]]>
 </select>

 

那么,就会报如下的错误

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

关于Dao中调用的queryForMap方法中的参数key就是指定查出的属性中以那个属性的值作为返回的map中的键。就如上面的例题,result的键分别为4,6,7,值分别为id等于4,6,7的对象。