Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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中支持学生关系表上的不同筛选器集的设计模式_Java_Mysql_Design Patterns_Querydsl_Code Design - Fatal编程技术网

用于在Java中支持学生关系表上的不同筛选器集的设计模式

用于在Java中支持学生关系表上的不同筛选器集的设计模式,java,mysql,design-patterns,querydsl,code-design,Java,Mysql,Design Patterns,Querydsl,Code Design,我有一个带有模式的SQL表 [学生id、标准、家乡城市、家乡州、国家、科目数量] 现在,我想在此表上支持api端点,如下所示: GET /students?home_state=?&country=?&home_city=?&standard=? 所有过滤器都是可选的 现在,我想知道一个适合这个需求的好代码设计。对于技术,我使用Java进行web应用,使用库querydsl进行运行时查询构造 我有一些想法,但我正在寻找一种具体的、可扩展的方法来处理这些情况,所以当添加

我有一个带有模式的SQL表

[学生id、标准、家乡城市、家乡州、国家、科目数量]

现在,我想在此表上支持api端点,如下所示:

GET /students?home_state=?&country=?&home_city=?&standard=? 
所有过滤器都是可选的

现在,我想知道一个适合这个需求的好代码设计。对于技术,我使用Java进行web应用,使用库querydsl进行运行时查询构造

我有一些想法,但我正在寻找一种具体的、可扩展的方法来处理这些情况,所以当添加一个新的过滤器列(比如fav_主题)时,应该需要最少的代码更改

对于想法,我正在考虑一个带有方法的过滤器接口

public interface Filter { 
   // If apiCallParameters contains this filter key, add filter to addToList
   void addFilter(Map<String, String> apiCallParameters, List<QueryFilters> addToList);
}
公共接口筛选器{
//如果APICALLPERAMETERS包含此筛选器键,请将筛选器添加到addToList
void addFilter(映射apiCallParameters,列出addToList);
}
所有可能的过滤器都将是一个类,每个类实现这个接口。现在,查询构造类可以有
列表
,每个类都有addFilter来决定是否添加此过滤器


我想更好地理解在代码设计中如何处理这种看似非常常见的情况。

您描述的api映射到REST接口。如果您正在寻找这种接口,您可以按照以下思路编写:

import org.springframework.stereotype.Service;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Context;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiParam;

@Service
@Path("/students")
public class StudentResource {

    @GET
    @Produces({MediaType.APPLICATION_JSON})
    public JSONObject getStudent(@Context UriInfo uriInfo,
                                 @ApiParam(required = false) @PathParam("home_state")String homeState,
                                 @ApiParam(required = false) @PathParam("home_city")String homeCity,
                                 @ApiParam(required = false) @PathParam("country")String country,
                                 @ApiParam(required = false) @PathParam("standard")String standard) 
    {

        // Do what you will with these strings which may be empty.
        JSONObject obj = new JSONObject;

        return obj;
    }
}

您正在描述的api映射到REST接口。如果您正在寻找这种接口,您可以按照以下思路编写:

import org.springframework.stereotype.Service;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Context;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiParam;

@Service
@Path("/students")
public class StudentResource {

    @GET
    @Produces({MediaType.APPLICATION_JSON})
    public JSONObject getStudent(@Context UriInfo uriInfo,
                                 @ApiParam(required = false) @PathParam("home_state")String homeState,
                                 @ApiParam(required = false) @PathParam("home_city")String homeCity,
                                 @ApiParam(required = false) @PathParam("country")String country,
                                 @ApiParam(required = false) @PathParam("standard")String standard) 
    {

        // Do what you will with these strings which may be empty.
        JSONObject obj = new JSONObject;

        return obj;
    }
}

这就是您编写的api端点,我对这个端点和数据库层之间的故事感兴趣这就是您编写的api端点,我对这个端点和数据库层之间的故事感兴趣