是否可以通过Jdbc模板生成任意条件SQL查询:
示例:
如果我为1参数(仅名称)传递值:按名称搜索
"select * from address where shopname = ?";
如果我为2参数(名称和城市)传递值 - 按店铺名称和城市搜索:
"select * from address where shopname = ? and city = ?";
我有mupliple搜索字段。 7个领域。如果用户输入任何组合。我只根据参数搜索。如何动态地将参数传递给sql。需要片段/示例如何实现此目的。
答案 0 :(得分:9)
你想要的是构建api的某种标准,Hibernate具有这种标准。不幸的是,我不认为Spring的JdbcTemplate有这样的设施。如果我错了,其他人会纠正我......
答案 1 :(得分:0)
Spring Data和Hibernate具有这种功能。虽然可能不值得在你的应用程序这么大的框架中拖动。
您可以尝试查看SimpleJdbcInsert http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html
编辑: 或者你可以尝试在SQL中修复它并检查为空,但是如果你有大量的数据要通过,这种技术会降低你的请求。
"select * from address
where (shopname = ? or shopname = null)
and (city = ? or city = null)";
答案 2 :(得分:0)
虽然有些人已经建议Hibernate是最好的方法,但我认为你可以尝试这种方法 -
String sql = "select * from address where 1 = 1";
if(shopname != null)
sql += "and shopname = :shopname";
if(city!= null)
sql += "and city = :city";
依此类推..并使用NamedParameterJdbcTemplate
答案 3 :(得分:-3)
如果Scala是您的选项,则可以使用以下内容构建查询:
case class Search(shopname:String, city:String = None) {
def sql = "select * from address where shopname = '"+shopname+"'" + city.map(" and city = '"+
_ +"'").getOrElse("")
}
使用示例:
Search("lloh").sql
Search("lloh", Some("Austin")).sql