2013-04-22 52 views
5

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

有什么办法直接从java代码执行查询吗?

+0

你的意思是,使用[普通JDBC(HTTP:/ /docs.oracle.com/javase/tutorial/jdbc/)? – skirsch 2013-04-22 20:11:03

回答

1

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

7

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" />

  • 把选择中的每个对象的xml标签在哪里你需要执行直接使用sql。

    <select id="findRecords" parameterType="SQLAdapter" resultMap="xxxxxResultMap"> 
        ${sql} 
    </select> 
    
  • 调用,比如

    String _sql = "select * from table where... order by... limit..."; 
    xxxxx.findRecords(new SQLAdapter(_sql)); 
    
  • 东西,这个选择方法已全部完成。您不能再在xml文件中编写复杂的sql语言。祝你好运。

  • 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>