今天在开发中遇到一个需求,让我根据前端传来的名称来查询对应的id,并且需要模糊查询。
传入参数:{
"corporateName": "xxx",
}
相应格式:[
{
"corporateName": "xxx",
"cid": xxx
},
{
"corporateName": "xxx",
"cid": xxx
}........
我的思路是,传入的名称是string类型的,我就需要用string类型的字段来接受,需要返回值是多个
对象,并且每个对象只需要原表的两个字段我就创建一个dto进行返回。还需要模糊查询我就在xml进行sql处理。下面附源码:
Dto:
/**
* dto:企业信息
*/
@Data
public class CorporateInfoCidDto {
/** 企业ID */
private Long cId ;
/** 企业名称 */
private String corporateName ;
}
Controller:
/**
* 根据企业名称查询对应的Cid
* @param corporateName
* @return
*/
@GetMapping("/findByCidName")
public List<CorporateInfoCidDto> getCid(String corporateName){
return jsCorporateInfoService.findByCidName(corporateName);
}
Service:
/**
* 根据企业名称查询对应的Cid
* @param corporateName
* @return
*/
List<CorporateInfoCidDto> findByCidName(String corporateName);
ServiceImpl:
/**
* 根据企业名称查询对应的Cid
*
* @param corporateName
* @return
*/
@Override
public List<CorporateInfoCidDto> findByCidName(String corporateName) {
//根据名称获取对应的字段信息
List<JsCorporateInfo> byCidName = corporateInfoMapper.findByCidName(corporateName);
//创建一个list容器来装多个不同的cid
List<CorporateInfoCidDto> cidDtos = new ArrayList<>();
//获取cid并且给容器对象赋值
for (JsCorporateInfo info : byCidName) {
CorporateInfoCidDto corporateinfoCidDto = new CorporateInfoCidDto();
corporateinfoCidDto.setCorporateName(info.getCorporateName());
corporateinfoCidDto.setCId(info.getcId());
cidDtos.add(corporateinfoCidDto);
}
return cidDtos;
}
Mapper:
/**
* 根据企业名称查询对应的Cid
*
* @param corporateName
* @return
*/
List<JsCorporateInfo> findByCidName(String corporateName);
MapperXml:
<!-- 根据企业名称查询对应的字段信息 -->
<select id="findByCidName" resultMap="JsCorporateInfoMap">
select c_id,corporate_name from js_corporate_info where corporate_name like concat('%', #{corporateName}, '%')
</select>
测试结果: