Python 官方文档:入门教程 => 点击学习
目录前言1、编写xml: sqlGenarate.mapper.xml2、定义接口3、实现接口总结前言 如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S
如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。通常使用动态 SQL 不可能是独立的一部分,mybatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。
目的:利用mybatis动态生成sql的能力返回可执行的sql,但并不会执行。
场景:需要生成复杂的sql供其他程序执行
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "Http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jason.bi.data.sql.generate">
<select id="getSql">
SELECT
a,
b
FROM
`table_name`
WHERE
field1 = #{field1Value} AND field2 = #{field2Value}
</select>
</mapper>
import io.swagger.annotations.apiOperation;
import java.util.Map;
public interface SqlService {
@ApiOperation(value = "动态生成sql")
String generate(String sqlId, Map<String, Object> paramMap);
}
sqlId = namespace + ‘.’ + id
如SqlGenarate.mapper.xml中getSql对应的sqlId即为:com.jason.bi.data.sql.generate.getSql
paramMap为参数,paramMap.put(“field1Value”,“abc”),paramMap.put(“field2Value”,“efg”)
,
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class SqlServiceImpl implements SqlService {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Override
public String generate(String sqlId, Map<String, Object> paramMap) {
//获取执行sql
Configuration con = sqlSessionFactory.getConfiguration();
//传xml文件中的 需要执行的id编号,如: com.jason.bi.data.sql.generate.getSql
MappedStatement s = con.getMappedStatement(sqlId);
BoundSql bSql = s.getBoundSql(paramMap);
//获取到sql中封装的参数的数量
List<ParameterMapping> paramValues = bSql.getParameterMappings();
return getExecuteSql(bSql.getSql(), paramValues, paramMap);
}
private String getExecuteSql(String sql, List<ParameterMapping> paramValues, Map map) {
while (sql.indexOf("?") != -1 && paramValues.size() > 0) {
String paramName = paramValues.get(0).getProperty();
String paramValue = map.get(paramName).toString();
String value = "";
if (paramValue instanceof String) {
value = "'" + paramValue + "'";
}
sql = sql.replaceFirst("\\?", value);
paramValues.remove(0);
}
return sql;
}
}
到此这篇关于利用Java如何获取Mybatis动态生成sql接口实现的文章就介绍到这了,更多相关Java获取Mybatis动态生成sql接口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 利用Java如何获取Mybatis动态生成的sql接口实现
本文链接: https://www.lsjlt.com/news/161847.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0