将SQL查询放在CrudRepository中以限制列(以及在此之后的进一步SQL查询)



我正在开发一个记录用户请求响应的 Spring 应用程序(将其发送到数据库并检索它(。 获取记录代码是这样的(控制器(:

/**
* this method fetches all userrequest response records from user_request_response table
* @return
*/
@CrossOrigin(origins = "*")
@GetMapping(path="/all")
public @ResponseBody Iterable<UserRequestResponse> getAllRequestResponseRecords() {
return userRequestResponseRepository.findAll();
}

道码:

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import com.abc.datacollection.entity.UserProjection;
import com.abc.datacollection.entity.UserRequestResponse;
public interface UserRequestResponseRepository extends CrudRepository<UserRequestResponse, Integer> {

public static final String FIND_QUERY = 
"select new com.abc.datacollection.entity.UserRequestResponse(user.u_httpstatus ,user.u_queryparam) from UserRequestResponse user";
@Query(value = FIND_QUERY)
List<UserProjection> getAllRequestResponseRecords();
}

具有 getter 和 setter 的类:(删除了一些变量及其 getter 和 setter(

import java.sql.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity // This tells Hibernate to make a table out of this class
public class UserRequestResponse {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String u_httpstatus;
private String u_error_message;
private String u_queryparam;

public UserRequestResponse(String u_httpstatus, String u_queryparam) {
this.u_httpstatus = u_httpstatus;
this.u_queryparam = u_queryparam;
}
public int getSys_id() {
return sys_id;
}
public String getU_httpstatus() {
return u_httpstatus;
}
public void setU_httpstatus(String u_httpstatus) {
this.u_httpstatus = u_httpstatus;
}
public String getU_error_message() {
return u_error_message;
}
public void setU_error_message(String u_error_message) {
this.u_error_message = u_error_message;
}
public String getU_queryparam() {
return u_queryparam;
}
public void setU_queryparam(String u_queryparam) {
this.u_queryparam = u_queryparam;
}

}

用于提取u_queryparam和u_httpstatus的投影:

public interface UserProjection {
String getU_httpstatus();
String getU_queryparam();
}

MySQL查询示例(我试图适应CrudRepository中的java代码的查询,InternSearchAnalytics.user_request_response是表的名称(:

select u_httpstatus, u_queryparam from InternSearchAnalytics.user_request_response

但是,当我运行 java 代码并点击生成的端点时,我会得到所有字段。有人可以在这里帮我吗?我已经坚持了 2 天了。

您可以使用UserRequestResponse类中的新构造函数从查询中获取选定的字段,例如

public UserRequestResponse(String u_httpstatus, String u_queryparam) {
this.u_httpstatus = u_httpstatus;
this.u_queryparam = u_queryparam;
}

对于查询,您应该使用构造函数更改它

public static final String FIND_QUERY = 
"select new com.your.package.name.UserRequestResponse(user.u_httpstatus ,user.u_queryparam) from UserRequestResponse user";

一点是您需要使用具有完全限定名称的构造函数。希望这有帮助。

最新更新