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

Can I create dynamic temporary table using iBatis?

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

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

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

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

create temporary table tmp_contact_$userId$

iBatis 编译这条语句时会

create temporary table tmp_contact_123

而不是

create temporary table tmp_contact_'123'

您需要在 .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 语句中创建临时文件 table。您需要使用双“##”在 IBATIS 中创建临时 table。 “##”将替换为单个“#”,它将创建名为“#TEMPTABLE”的临时文件 table。请记住它们是您需要搜索的临时 table 的一些限制。

希望对您有所帮助..