是否可以通过Jdbc模板生成任意where条件SQL查询:示例:如果我传递1个参数的值(仅名称):按名称搜索
"select * from address where shopname = ?";
如果我通过2参数值(名称和城市)-搜索商店名称和城市:
"select * from address where shopname = ? and city = ?";
我有多个搜索字段。7个字段。如果用户输入任何组合。我有搜索只基于参数。如何动态传递参数到SQL。需要片段/示例如何实现这一点。
wvmv3b1j1#
你需要的是某种标准构建API,Hibernate有。不幸的是,我不认为Spring的JdbcTemplate有任何这样的工具。如果我错了,其他人会纠正我...
gpnt7bae2#
虽然有些人已经建议Hibernate是最好的方法,但我仍然认为您可以尝试这种方法-
String sql = "select * from address where 1 = 1"; if(shopname != null) sql += "and shopname = :shopname"; if(city!= null) sql += "and city = :city";
等等..并使用命名参数JdbcTemplate
camsedfj3#
SpringData和Hibernate都有这样的功能,尽管在这么大的框架中为你的应用添加这些功能可能不值得。您可以尝试 checkout SimpleJdbcInsert http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html
"select * from address where (shopname = ? or shopname = null) and (city = ? or city = null)";
slwdgvem4#
如果您使用的是Kotlin,则可以如下构造查询:
fun optParamStr(param: Any?, queryParamName: String): String? = param?.let { "$queryParamName = :$queryParamName" } val params = listOf( value1 to filed1, value2 to field2, value3 to field3 ).mapNotNull { optParamStr(it.first, it.second) }.joinToString(" AND ")
72qzrwbm5#
如果您可以选择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
5条答案
按热度按时间wvmv3b1j1#
你需要的是某种标准构建API,Hibernate有。不幸的是,我不认为Spring的JdbcTemplate有任何这样的工具。如果我错了,其他人会纠正我...
gpnt7bae2#
虽然有些人已经建议Hibernate是最好的方法,但我仍然认为您可以尝试这种方法-
等等..并使用命名参数JdbcTemplate
camsedfj3#
SpringData和Hibernate都有这样的功能,尽管在这么大的框架中为你的应用添加这些功能可能不值得。
您可以尝试 checkout SimpleJdbcInsert http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html
slwdgvem4#
如果您使用的是Kotlin,则可以如下构造查询:
72qzrwbm5#
如果您可以选择Scala,那么可以使用以下代码构造查询:
示例用法: