2014-12-29 29 views
0

我需要通過散列表中的參數傳遞數據庫名稱。在mybatis中傳遞數據庫名

我MyBatis的XML是

<select id="getById" parameterType="hashmap" resultMap="result"> 
    SELECT * FROM #{db}.CONTACT WHERE CONTACT_NAME = #{name} 
</select> 

我的Java調用是

hm.put("db","abc"); 
hm.put("name","def"); 
Contact c=contactDAO.selectById(hm); 

但我得到以下錯誤

The error occurred while setting parameters 
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your  
SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax  
to use near ''abc'.CONTACT WHERE CONTACT_NAME = 'def'' at line 1 

我們能否不通過數據庫的名稱作爲參數mybatis?

回答

3

您需要使用${}而不是#{}代替直接String替代。

<select id="getById" parameterType="hashmap" resultMap="result"> 
    SELECT * FROM ${db}.CONTACT WHERE CONTACT_NAME = #{name} 
</select> 
0

它終於奏效了。我所做的修改將

<select id="getById" parameterType="hashmap" resultMap="result"> 
SELECT * FROM ${db}.CONTACT WHERE CONTACT_NAME = #{name} 
</select> 

有點研究後,不同的是,「#」用於替代的PreparedStatement。 '$'用於直接字符串替換。