2012-09-19 35 views
5

我知道这个问题会被询问很多次,当我在选择查询中包含多个参数时,如果我遵循guide,我仍然遇到问题。下面是我的配置文件:MyBatis中的多个参数?

<select id="selectByDate" parameterType="map" resultMap="campaignStats"> 
    SELECT * FROM CampaignStats WHERE statsDate >= #{start} AND statsDate <= #{end} 
</select> 

这里是我的Java代码:

public List<DpCampaignStats> selectByDate(Date start, Date end){ 
    SqlSession session = sqlSessionFactory.openSession(); 
    try { 
     Map<String, Date> map = new HashMap<String, Date>(); 
     map.put("start", start); 
     map.put("end", end); 
     List<DpCampaignStats> list = session.selectList("DpCampaignStats.selectByDate", map); 
     return list; 
    } finally { 
     session.close(); 
    } 
} 

但我得到的错误:java.lang.ExceptionInInitializerError这意味着我必须在我的配置文件和我的一些错误找不到原因。

回答

3

我已经由我自己找到了答案:“<”和“>”具有在XML文件中的某些含义,所以“> =”应该是'& GT; ' ='''而'< ='应该是'& lt; ='。

+0

的 '>' 逃逸到>是没有必要的 – StrekoZ

11

只是包装你的SQL语句在CDATA:

<![CDATA[ 
    SELECT * FROM CampaignStats WHERE statsDate >= #{start} AND statsDate <= #{end} 
]]>