5

我需要在运行时执行由 java 代码生成的查询(不是静态方法)。我已经知道如何使用注解和静态方法或使用 xml 映射器来构建动态查询,但它不适合我的情况。

有没有办法直接从java代码执行查询?

4

3 回答 3

9

Mybatis 已经有这个功能了,但是你必须使用适配器,如下所示。

  1. 创建一个适配器类;

    public class SQLAdapter {
      String sql;
    
      public SQLAdapter(String sql) {
          this.sql = sql;
      }
    
      public String getSql() {
          return sql;
      }
    
      public void setSql(String sql) {
          this.sql = sql;
      }
    }
    
  2. 创建类 SQLAdapter 的 typeAlias

<typeAlias alias="sqladapter" type="com.zj.xxx.xxx.SQLAdapter" />

  1. 在需要直接执行 sql 的每个对象 xml 中放置选择标记。

    <select id="findRecords" parameterType="SQLAdapter" resultMap="xxxxxResultMap">  
        ${sql}  
    </select> 
    
  2. 像这样调用这个选择方法

    String _sql = "select * from table where... order by... limit...";
    xxxxx.findRecords(new SQLAdapter(_sql));
    
  3. 事情都已经做好了。您不能再在 xml 文件中编写复杂的 sql 语言。祝你好运。

于 2014-10-11T02:05:50.810 回答
2

似乎最好的答案是在这种情况下使用 JDBC。

于 2013-04-23T11:47:33.370 回答
0

You can do this using SQL query as literal parameter:

<select id="findRecords" parameterType="string" resultMap="xxxxxResultMap">  
    ${_parameter}
</select>

You can pass only where clause:

<select id="findRecords" parameterType="string" resultMap="xxxxxResultMap">  
    select * from records where ${_parameter}
</select>
于 2015-02-26T11:56:57.000 回答