Mybatisplus-动态获取sql字符串
记录贴
借助mybatisplus构建动态 SQL 查询语句的功能,来动态构建sql来做presto查询,这样就不用在代码里写sql了
getBoundSql
是 MyBatis 中 org.apache.ibatis.mapping.BoundSql
接口的方法,用于获取一个表示 SQL 语句和相关参数映射的对象。BoundSql
实例包含了预编译的 SQL 语句以及参数映射信息,可以用于执行数据库操作。
1 |
|
xml
1
2
3
4
5
6<select id="demoList" resultType="com.*.dto.DemoDTO">
select * from t demo where 1=1
<if test="form.status != null">
and t.status = #{form.status}
</if>
</select>mapper
1
2
3
4@Repository
public interface DemoMapper extends BaseMapper<DemoEntity> {
List<DemoDTO> demoList(@Param("form") DemoForm form);
}调用
值得注意的是,如果使用了@Param(“form”)给方法参数起别名,那么就要使用Map来包装一下map.put(“form”,原来的form对象),否则获取不到form
1
2
3
4
5Map<String, Object> map = new HashMap<>();
Map<String, Object> map2 = JSON.parseObject(JSON.toJSONString(demoForm), new TypeReference<Map<String, Object>>() {});
map.put("form", map2);
String sql=dynamicSqlUtils.getSql(DemoMapper.class, "demoList", map);
//presto.query(sql) 或者 hive.query(sql)
Mybatisplus-动态获取sql字符串
https://cason.work/2023/12/11/Mybatisplus-动态获取sql字符串/