Mybatis中使用原生sql与参数进行查询.md
- 一、mapper中定义接口
- 二、mapper对应的xml
- 三、使用样例
有时需要使用原生sql和参数进行动态查询(比如可能是通过参数或配置的sql或sql片段执行查询,可能需要用到原生sql查询场景),使用方式如下。
示例如下:
一、mapper中定义接口
/*** mapper接口*/
public interface UserMapper {/** 列表查询,采用传sql及参数的方式,类似使用了PrepareStatement进行select查询 */public List<Map<String, Object>> list(@Param("sql") String sql, @Param("param") Map<String, Object> params);}
二、mapper对应的xml
<select id="list" resultType="hashmap" parameterType="hashmap">${sql}</select>
三、使用样例
String sql = "select * from sys_user where id = #{param.id}";Map<String, Object> params = new HashMap<>();params.put("id", 6);List<Map<String, Object>> result = userMapper.list(sql, params);
从执行日志打印来看,是生效了的
2024-11-24 23:02:17,144 DEBUG [http-nio-8080-exec-1] ******.mapper.UserMapper.list.debug:159 - ==> Preparing: select * from sys_user where id = ?
2024-11-24 23:02:17,159 DEBUG [http-nio-8080-exec-1] ******.mapper.UserMapper.list.debug:159 - ==> Parameters: 6(Integer)
2024-11-24 23:02:17,173 DEBUG [http-nio-8080-exec-1] ******.mapper.UserMapper.list.debug:159 - <== Total: 1