我可以使用iBatis创建动态临时表吗?

时间:2015-01-08 18:24:12

标签: java mysql ibatis

在查询用户的联系人时,我想使用特定于该用户的临时表,例如tmp_contact_ {userId},如果userId为123,则应解析为tmp_contact_123

我继承了一个使用iBatis与MySql数据库进行互操作的java项目。 我已经阅读了一些iBatis文档,我在xml中看到可替换参数为#{userId}或#userId#。前者似乎被解释为准备好的陈述的参数并产生问号,例如, '创建临时表tmp_contact_?',而后者则保留为文字,例如'创建临时表tmp_contact_#userId#'。 是否有替代语法来生成'create temporary table tmp_contact_123'?

2 个答案:

答案 0 :(得分:1)

是的,有办法做到这一点!

使用#在字符串参数周围加上引号。您可以改用$。对于你的例子,它将是

create temporary table tmp_contact_$userId$

当iBatis编译此语句时,它将是

create temporary table tmp_contact_123

而不是

create temporary table tmp_contact_'123'

答案 1 :(得分:1)

您需要在.xml文件中进行以下更改:

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="xxx" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <statements>
    <select id="GetTempTableData" resultClass="Student" parameterClass="System.String">
        CREATE TABLE ##TEMPTABLE (ID int, Name varchar(20))
        INSERT INTO ##TEMPTABLE (ID, NAME) VALUES (1, 'RAVI')
        INSERT INTO ##TEMPTABLE (ID, NAME) VALUES (2, 'KAPIL')
        SELECT * FROM ##TEMPTABLE
    </select>   
  </statements>
</sqlMap>

注意:您需要在select语句中创建临时表。您需要使用双“##”在IBATIS中创建临时表。 “##”将替换为单个“#”,它将创建名为“#TEMPTABLE”的临时表。请记住它们是您需要搜索的临时表的一些限制。

希望这会对你有帮助..