使用ssm+sql server多条件查询sql 动态拼接未成功 5C

Mapper
//根据条件查询信息
List selectSaleInfoByData(@Param("typename")String typename,@Param("productnum")String productnum,
@Param("productname")String productname,@Param("storename")String storename);
mapper.xml

select * from saleinfo


typename=#{typename}


and productnum=#{productnum}


and productname like '%'+#{productname}+'%'


and storename=#{storename}



controller
/**
* 根据条件查询信息
* @param typename
* @param productnum
* @param productname
* @param session
* @param request
* @return
*/
@RequestMapping(value="/selectSaleInfo.html",method=RequestMethod.GET)
public String selectSaleInfoByDatas(@RequestParam(value="typename",required=false)String typename,@RequestParam(value="productnum",required=false)String productnum,
@RequestParam(value="productname",required=false)String productname,HttpSession session){

    Store store=(Store) session.getAttribute(Constants.USERINFO_SESSION);
    String storename=store.getStorename();
    System.out.println(typename);
    System.out.println(productnum);
    System.out.println(productname);
    System.out.println("=========>"+storename);
    List<SaleInfo> list1=saleInfoService.selectSaleInfoByData(typename, productnum, productname, storename);
    session.setAttribute("saleinfodatalist", list1);


    return "selectSaleInfo";
}

jsp

品类查询: 商品代码: 商品名称:

控制台

  • (39749 ms) - 2019-4-8 15:06:55DEBUG ==> Preparing: select * from saleinfo WHERE typename=? and productnum=? and productname like '%'+?+'%' and storename=?
  • (39749 ms) - 2019-4-8 15:06:55DEBUG ==> Parameters: (String), 111413170(String), (String), 003石碣店(String)
  • (39783 ms) - 2019-4-8 15:06:55DEBUG <== Total: 0
  • (39784 ms) - 2019-4-8 15:06:55DEBUG Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@221de751]
  • (39785 ms) - 2019-4-8 15:06:55DEBUG Returning JDBC Connection to DataSource 查不到结果

5个回答

controller 传进的参数有两个是空的啊, SQL上如果没加判空的话应该就查询不到吧

csdn_780
csdn_780 回复javaXingzhe: SQL已经打印出来了, 四个条件都有, 说明参数为空了也把条件拼接上去了, 好好看看你是千虑一得
一年多之前 回复
javaXingzhe
javaXingzhe mapper.xml的写法就是动态拼接,有了参数才会拼接到sql语句中,没有的话会自动去掉该条件,现在不知是哪个环节出了问题,要在controller做判断是否参数为空吗
一年多之前 回复

like 是这样写的 LIKE CONCAT('%',#{name},'%') xml中没有+号
https://www.cnblogs.com/ysocean/p/7289529.html

qq_34444616
咖啡加冰66 回复javaXingzhe: xml加入 if判断 程序中也加入处理
一年多之前 回复
qq_34444616
咖啡加冰66 回复javaXingzhe: 嗯那应该没问题 你可以看看发你的连接 xml
一年多之前 回复
javaXingzhe
javaXingzhe 这是mysql 的写法,sql server会报语法错误
一年多之前 回复

你是sqlserver的话,应该就是like那块的问题,需要使用concat去配合做模糊查询的,具体的你可以百度下concat的使用方法

1.首先,你先试试直接在数据库使用这条SQL能不能查询到数据:

select * from saleinfo WHERE typename=? and productnum=? and productname like '%'+?+'%' and storename=?

参数就是使用能查询到结果的参数

2.要是SQL在数据库中能查到数据,那就要看看你传进去的参数是不是有效的,会不会是空了。

3.你先试试全部参数不为空看看能不能查到结果,然后再试试一个两个参数为空能不能查询到结果。

jim_LoveQ
Jim~LoveQ 这个的问题在于数据库中这个参数是什么类型,你传进去的参数的类型要与数据库中的字段的类型一样才不会报错的,所以你对比下参数类型,把参数的类型转成跟数据库一样的,然后再传进去
一年多之前 回复
javaXingzhe
javaXingzhe 按照您讲解的方法,发现参数接受String类型的会报numberformatexception,input标签type=text,后端不是用String接收的吗
一年多之前 回复



and typename=#{typename}


and productnum=#{productnum}


and productname like '%'+#{productname}+'%'


and storename=#{storename}


这样判断传参是否有值,有值才加入条件查询。
有用的话请采纳。
图片说明
提交答案发现标签显示不出来,参照图片。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问