如何使用mybatis直接从java代码执行查询?

时间:2013-04-22 16:52:14

标签: java sql mybatis

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

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

3 个答案:

答案 0 :(得分:8)

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

  3.   

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

    1. 将select标记放在需要直接执行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语言。祝你好运。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您可以使用SQL查询作为文字参数:

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

您只能传递where子句:

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