gpt4 book ai didi

java - Spring Boot中的多子句查询

转载 作者:行者123 更新时间:2023-11-29 18:29:57 24 4
gpt4 key购买 nike

package com.mobile.model;

import javax.persistence.*;


@Entity
@Table(name = "mobile_table")
public class Mobile {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
public int mobileId;

@Column(name = "mobile_name",nullable = false,length = 20)
public String mobileName;

@Column(name = "mobile_brand",nullable = false,length = 15)
public String mobileBrand;

@Column(name="mobile_networkType")
public String mobileNetworkType;

@Column(name = "mobile_core")
public Integer mobileAvailableCore;

@Column(name = "mobile_ram")
public Integer mobileRAMSize;

@Column(name = "mobile_os")
public String mobileOS;

@Column(name = "mobile_wifif")
public Boolean mobileWifiAvailability;

@Column(name = "mobile_bluetooth")
public Boolean mobileBluethoothAvailablity;

public Mobile() {
}

public Mobile(String mobileName, String mobileBrand, String mobileNetworkType, Integer mobileAvailableCore, Integer mobileRAMSize, String mobileOS, Boolean mobileWifiAvailability, Boolean mobileBluethoothAvailablity) {
this.mobileName = mobileName;
this.mobileBrand = mobileBrand;
this.mobileNetworkType = mobileNetworkType;
this.mobileAvailableCore = mobileAvailableCore;
this.mobileRAMSize = mobileRAMSize;
this.mobileOS = mobileOS;
this.mobileWifiAvailability = mobileWifiAvailability;
this.mobileBluethoothAvailablity = mobileBluethoothAvailablity;
}
}

//Query for multiple selection
@SuppressWarnings("unchecked")
public List<Mobile> getMobileSearch(String mobileBrand, Integer mobileRAMSize, String mobileOS){
return mobileDao.findAll(Specifications.where((Specification<Mobile>) getAllMobilesByBrand(mobileBrand))
.and((Specification<Mobile>) getAllMobilesByOS(mobileOS))
.and((Specification<Mobile>) getAllMobilesByRam(mobileRAMSize)));
}

// calling function for multiple attribute Search in controller class
@RequestMapping(value="/searchMobile", method=RequestMethod.GET)
public ResponseEntity<List<Mobile>> searchMobile(@RequestParam(value="brand") String mobileBrand, @RequestParam(value="ramSize") Integer ramSize, @RequestParam(value="mobileOs") String MobileOs)
{
List<Mobile> mobileList=mobileService.getMobileSearch(mobileBrand,ramSize,MobileOs);
return new ResponseEntity<List<Mobile>>(mobileList,HttpStatus.OK);
}

// here is how my database is calling database query.
@Repository
public interface MobileDao extends CrudRepository<Mobile, Integer>, JpaSpecificationExecutor<Mobile> {

public List<Mobile> findByMobileBrand(String mobileBrand);

@Query("select distinct m.mobileBrand from Mobile m")
public List<String > getAllDistinctBrand();

public List<Mobile> findByMobileRAMSize(Integer mobileRAMSize);

@Query("select distinct m.mobileRAMSize from Mobile m")
public List<Integer> getAllDistinctRam();

public List<Mobile> findByMobileOS(String mobileOS);


@Query("select distinct m.mobileOS from Mobile m")
public List<String > getAllDistinctMobileOS();

我正在尝试实现对不同电子商务网站(如 Flipkart、Amazon)中使用的产品的搜索查询,其中用户为产品插入不同的属性。根据产品属性,显示结果。对于实现,我使用 Spring Boot 和 JPA 作为数据库。

如何动态搜索单个查询中的多个子句。例如,在 SQL 查询的情况下,我们像这样搜索多个子句。

如何在 JPA 中实现多个子句。

Select * from table_name where attribute1="Attb" and attribute2="Attb2" and attribute3="Attb3";

Attb、Attb2 和 Attb3 根据客户端输入动态更改。

最佳答案

你的问题不够清楚。如果您需要使用可变数量的条件,则必须使用Criteria API。它允许您有条件地创建谓词列表并将其用于数据获取。 http://www.objectdb.com/java/jpa/query/criteria

它看起来像这样:

    myQueryMethod(UserChoices choices){
if(choices.someChoice1){
predicates.add(somePredicate)
}
.....

关于java - Spring Boot中的多子句查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45775967/

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