gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:50:30 25 4
gpt4 key购买 nike

我使用 PostrgeSQL 9.6 和 MyBatis 3.1(下面还有 Java 8 和 Spring),并且我需要执行一个自定义查询,由于它的复杂性,我使用 StringBuilder 动态创建该查询。

如何将它传递到我的类mapper.xml 文件?

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

我还阅读了 MyBatis 的 SQL Builder 类,如下 the official guide但我想念如何启动我创建的查询/对象。顺便说一句,这对我来说似乎不是正确的方法,因为我必须构建的查询很复杂。按照指南,我似乎无法使用 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查询,但也可以使用新的SQL(){{一些子句,例如SELECT(string)、WHERE(string)等。 }}.toString();

2。在 Mapper 接口(interface)中使用您的提供程序类

我们可以使用@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 章。

关于java - MyBatis 3.1.1,如何直接执行自定义SQL代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47906662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com