HasorDB SqlParameterSource(使用接口形式给动态SQL传参)
SqlParameterSource是通过接口形式给动态 SQL 传参数,功效和 数组/Map 传参类似,不同的是编程性更强。
HasorDB 内置了两个实现,分别为:
-
MapSqlParameterSource将一个 Map 转换为 SqlParameterSource接口 -
BeanSqlParameterSource将一个 Bean 转换为 SqlParameterSource接口
下面用相同的功效列举不同的查询写法
使用数组传参
String querySql = "select * from test_user where age > ?";
Object[] queryArg = new Object[] { 40 };
List<Map<String, Object>> result = jdbcTemplate.queryForList(querySql, queryArg);使用Map传参
String querySql = "select * from test_user where age > :age";
Map<String, Object> queryArg = Collections.singletonMap("age", 40);
List<Map<String, Object>> result = jdbcTemplate.queryForList(querySql, queryArg);使用 MapSqlParameterSource 传参
使用 MapSqlParameterSource 传参,返回值为 List/Map
String querySql = "select * from test_user where age > :age";
Map<String, Object> queryArg = Collections.singletonMap("age", 40);
SqlParameterSource source = new MapSqlParameterSource(queryArg);
List<Map<String, Object>> result = jdbcTemplate.queryForList(querySql, source);如果返回值希望是 List/DTO 可以使用下面这个方法
List<TestUser> result = jdbcTemplate.queryForList(querySql, source, TestUser.class);使用 BeanSqlParameterSource 传参
使用 BeanSqlParameterSource 传参,返回值为 List/Map
String querySql = "select * from test_user where age > :age";
TestUser argDTO = new TestUser();
argDTO.setAge(40);
BeanSqlParameterSource source = new BeanSqlParameterSource(argDTO);
List<Map<String, Object>> result = jdbcTemplate.queryForList(querySql, source);如果返回值希望是 List/DTO 可以使用下面这个方法
List<TestUser> result = jdbcTemplate.queryForList(querySql, source, TestUser.class);