2013-04-22 26 views
5

Potrzebuję wykonać kwerendę, która została wygenerowana przez kod java w środowisku wykonawczym (nie metoda statyczna). Już wiem, jak budować zapytania dynamiczne za pomocą adnotacji i metody statycznej lub przy użyciu narzędzia mapowania xml, ale w moim przypadku nie jest to odpowiednie.Jak egzekwować zapytanie bezpośrednio z kodu java za pomocą mybatis?

Czy istnieje sposób na wykonanie kwerendy bezpośrednio z kodu Java?

+0

Masz na myśli, używając [zwykły JDBC] (http://docs.oracle.com/javase/tutorial/jdbc/)? – skirsch

Odpowiedz

1

Wydaje się, że najlepszą odpowiedzią jest użycie JDBC w tym przypadku.

7

Mybatis ma już tę funkcję, ale musisz użyć adaptera w następujący sposób.

  1. utworzyć klasę adaptera;

    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. tworzyć typeAlias ​​z klasy SQLAdapter

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

  1. umieścić wybrać znacznika na każdym obiekt XML gdzie musisz wykonać exec ute sql bezpośrednio.

    <select id="findRecords" parameterType="SQLAdapter" resultMap="xxxxxResultMap"> 
        ${sql} 
    </select> 
    
  2. nazywają to wybierz metodę jak

    String _sql = "select * from table where... order by... limit..."; 
    xxxxx.findRecords(new SQLAdapter(_sql)); 
    
  3. rzeczy zostały wszystko zrobić. nie można już zapisywać złożonego języka sql w pliku xml. Powodzenia.

0

Można to zrobić za pomocą zapytania SQL jako dosłowne parametr:

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

można przekazać tylko wtedy, gdy klauzula:

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