Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mybatis@Select带有sql关键字的静态工厂编译时出错?_Java_Spring_Compiler Errors_Mybatis - Fatal编程技术网

Java mybatis@Select带有sql关键字的静态工厂编译时出错?

Java mybatis@Select带有sql关键字的静态工厂编译时出错?,java,spring,compiler-errors,mybatis,Java,Spring,Compiler Errors,Mybatis,当我使用@Select时,它是ibatis的注释,代码如下: @Select({"SELECT ", selectField, " FROM ", table, "WHERE finished = #{finished}"}) List<ToDo> listToDoByFinished(@Param("finished") Integer finished); SqlFactory中定义的sql关键字: package me.freezehome.blog.factory; p

当我使用@Select时,它是ibatis的注释,代码如下:

@Select({"SELECT ", selectField, " FROM ", table, "WHERE finished = #{finished}"})
 List<ToDo> listToDoByFinished(@Param("finished") Integer finished);
SqlFactory
中定义的sql关键字:

package me.freezehome.blog.factory;

public  class SqlFactory {
    private SqlFactory(){}
    public static final  String SELECT = " SELECT ";
    public static final  String INSERT = " INSERT ";
    public static final  String UPDATE = " UPDATE ";
    public static final  String DELETE = " DELETE ";

    public static final  String WHERE = " WHERE ";
    public static final  String FROM = " FROM ";
    public static final  String AND = " AND ";
    public static final  String OR = " OR ";
    public static final  String IN = " IN ";
    public static final  String INTO = " INTO ";
    public static final  String VALUES = "VALUES";
    public static final  String EQUAL = " = ";


}
接口中定义的其他:

package me.freezehome.blog.dao;

import me.freezehome.blog.driver.MyInLanguageDriver;
import me.freezehome.blog.model.ToDo;
import org.apache.ibatis.annotations.*;

import java.util.List;

import static me.freezehome.blog.config.StringConfig.strSeparator;
import static me.freezehome.blog.factory.SqlFactory.*;

public interface ToDoDAO {
    String table = "todo";
    String id = "id";
    String title = "title";
    String content = "content";
    String finished = "finished";

    String selectField = id + strSeparator + title + strSeparator + content + strSeparator + finished;
    String insertField = title + strSeparator + content;
}
其他信息:

  • mybatis 3.4.1
  • mybatis spring 1.3.0
  • 春季4.3.3
  • mavne 3.3.9
  • java“1.8.0_111” Java(TM)SE运行时环境(build 1.8.0_111-b14) Java HotSpot(TM)64位服务器虚拟机(构建25.111-b14,混合模式)

我想您已经导入了静态SqlFactory。*


在ToDoDAO接口中,所有字符串都应该是静态的,因为注释需要常量参数。

我已经在我的小应用程序上尝试了这段代码。因此,Java编译器将尝试引用与常量同名的方法参数

在这种情况下,Java编译器将尝试引用方法参数(
finished
定义为
Integer
),而不是
String finished=“finished”(常数)。因此,在编译时发生类型转换错误

我不知道它是否是Java编译器上的规范


您可能可以通过将常量名称转换为大写来解决此问题

为什么?SqlFactory的变量都是静态的final。ToDoDAO接口的变量不是但必须是,但为什么我不能导入静态SqlFactory。*?不,你必须
导入静态me.freezehome.blog.factory.SqlFactory.
才能编译,只是告诉你,因为它不在你的代码段中。对不起,没有粘贴所有代码是我的错。我有更新代码是的,我用大写字母解决它,但我不能理解。
package me.freezehome.blog.factory;

public  class SqlFactory {
    private SqlFactory(){}
    public static final  String SELECT = " SELECT ";
    public static final  String INSERT = " INSERT ";
    public static final  String UPDATE = " UPDATE ";
    public static final  String DELETE = " DELETE ";

    public static final  String WHERE = " WHERE ";
    public static final  String FROM = " FROM ";
    public static final  String AND = " AND ";
    public static final  String OR = " OR ";
    public static final  String IN = " IN ";
    public static final  String INTO = " INTO ";
    public static final  String VALUES = "VALUES";
    public static final  String EQUAL = " = ";


}
package me.freezehome.blog.dao;

import me.freezehome.blog.driver.MyInLanguageDriver;
import me.freezehome.blog.model.ToDo;
import org.apache.ibatis.annotations.*;

import java.util.List;

import static me.freezehome.blog.config.StringConfig.strSeparator;
import static me.freezehome.blog.factory.SqlFactory.*;

public interface ToDoDAO {
    String table = "todo";
    String id = "id";
    String title = "title";
    String content = "content";
    String finished = "finished";

    String selectField = id + strSeparator + title + strSeparator + content + strSeparator + finished;
    String insertField = title + strSeparator + content;
}