MyBatis 3.1.1,如何直接执行自定义SQL代码

问题描述 投票:0回答:1

我使用PostrgeSQL 9.6和MyBatis 3.1(也有Java 8和Spring),我需要执行一个自定义查询,我使用StringBuilder动态创建,因为它的复杂性。

如何将其传递给我的类mapper.xml文件?

我听说过@SelectProvider,但是?找不到完整的例子......有人可以给我一步一步的指导吗?

我还在阅读the official guide之后的MyBatis的SQL Builder类,但我想念如何启动我创建的查询/对象。顺便说一句,这对我来说似乎不是正确的方式,因为我必须构建查询的复杂性。按照指南,似乎我不能使用像IF或FOR这样的连续运算符来创建查询字符串...所以它不能用于我的使用。

谢谢。

java postgresql mybatis
1个回答
1
投票

我只使用@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查询,还可以使用新的SQL(){{一些子句,如SELECT(字符串),WHERE(字符串)等。}}。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);

}

最后,使用你的mapper。

更多细节,请参阅https://github.com/v5developer/maven-framework-project/blob/master/reference/Java.Persistence.with.MyBatis.3.pdf

特别是在第4章。

© www.soinside.com 2019 - 2024. All rights reserved.