簡體   English   中英

MyBatis 3.1.1,如何直接執行自定義SQL代碼

[英]MyBatis 3.1.1, how to execute custom SQL code directly

我使用 PostrgeSQL 9.6 和 MyBatis 3.1(下面還有 Java 8 和 Spring),我需要執行一個自定義查詢,我使用 StringBuilder 動態創建它,因為它很復雜。

如何將它傳遞給我的類 mapper.xml 文件?

我聽說過@SelectProvider,但是? 找不到完整的例子......有人可以給我一個分步指南嗎?

我也在閱讀 MyBatis 的 SQL Builder Class,遵循官方指南,但我想念如何啟動我創建的查詢/對象。 順便說一句,這對我來說似乎不是正確的方法,因為我必須構建的查詢很復雜。 按照指南,我似乎不能使用像 IF 或 FOR 這樣的條件運算符來創建查詢字符串......所以它不能供我使用。

謝謝。

我只將 @SelectProvider 用於 java 注釋,這是一種簡單的使用方法,這是我今年早些時候的簡單示例

1. 創建你的提供者類

package com.mybatis;

import java.util.Map;
import java.util.logging.Logger;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;

public class SqlProvider {

    public String sqlProvider(Map<String, Object> map){
        Logger.getLogger(SqlProvider.class.getName()).info("select * from student where id="+map.get("0"));
        return "select * from student where id="+map.get("0");
    }

    public String findById(@Param("id") int id){
        return new SQL(){{
            SELECT("id,name,info");
            FROM("student");
            WHERE("id="+id);
        }
            }.toString();
    }
}

您可以使用字符串生成您的 sql 查詢,但也可以使用 new SQL(){{some 子句,例如 SELECT(string),WHERE(string) 等 }}.toString();

2. 在 Mapper 接口中使用您的提供程序類

我們可以使用@SelectProvider(type=Class,method="methodName") 指定的類和方法

package com.mybatis;    
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;

/*
*
*Stu is an entity map to your table in db
*
*/
@Mapper
public interface StuMapper {

    @SelectProvider(type=SqlProvider.class,method="sqlProvider")
    public Stus sqlProvider(Map<String, Object> map);

    @SelectProvider(type=SqlProvider.class,method="findById")
    public Stus findById_(@Param("id") int id);

}

最后,使用你的映射器。

更多細節,見https://github.com/v5developer/maven-framework-project/blob/master/reference/Java.Persistence.with.MyBatis.3.pdf

特別是在第 4 章。

<select id="methodName" resultMap="alarmPieEntry">
  ${your_raw_sql}
</select>

只需在myClass_mapper.xml文件中使用${your_raw_sql}變量,不要use #{your_raw_sql}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM