iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >利用Java如何获取Mybatis动态生成的sql接口实现
  • 536
分享到

利用Java如何获取Mybatis动态生成的sql接口实现

2024-04-02 19:04:59 536人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1、编写xml: sqlGenarate.mapper.xml2、定义接口3、实现接口总结前言 如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S

前言

如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。通常使用动态 SQL 不可能是独立的一部分,mybatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。

目的:利用mybatis动态生成sql的能力返回可执行的sql,但并不会执行。

场景:需要生成复杂的sql供其他程序执行

1、编写xml: SqlGenarate.mapper.xml

<?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>

2、定义接口

import io.swagger.annotations.apiOperation;

import java.util.Map;


public interface SqlService {

	@ApiOperation(value = "动态生成sql")
	String generate(String sqlId, Map<String, Object> paramMap);
}

3、实现接口

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文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用Java如何获取Mybatis动态生成的sql接口实现
    目录前言1、编写xml: SqlGenarate.mapper.xml2、定义接口3、实现接口总结前言 如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S...
    99+
    2022-11-12
  • 如何使用spring动态获取接口的不同实现类
    这篇“如何使用spring动态获取接口的不同实现类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用spring动态获取...
    99+
    2023-06-29
  • 使用spring动态获取接口的不同实现类
    目录spring动态获取接口的不同实现类当时想到了两种解决办法获取某接口所有实现类正文结果spring动态获取接口的不同实现类 最近做项目,有个需求是和外部对接,从接口获取新闻数据,...
    99+
    2022-11-13
  • 如何利用php接口和ECharts生成动态更新的实时统计图
    如何利用php接口和ECharts生成动态更新的实时统计图,需要具体代码示例随着技术的不断发展,数据分析和可视化已经成为现代企业和机构必不可少的工具之一。ECharts作为一款流行的JavaScript数据可视化库,已经成为数据可视化的首选...
    99+
    2023-12-17
    echarts PHP接口 实时统计图
  • Java如何获取接口所有的实现类
    目录Java获取接口所有的实现类反射获取接口的所有实现类总结Java获取接口所有的实现类 最近因业务需求,要实现NodeRed服务后端化,为使各个节点的解析进行插件化(NodeRed...
    99+
    2023-01-09
    Java接口 Java实现类 Java获取接口实现类
  • 在Jav中使用httpclient与Jsoup实现获取动态生成的数据
    这期内容当中小编将会给大家带来有关在Jav中使用httpclient与Jsoup实现获取动态生成的数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java爬虫Jsoup+httpclient获取动态生成...
    99+
    2023-05-31
    java httpclient jsoup
  • 如何在java中利用cglib动态生成一个实体bean
    如何在java中利用cglib动态生成一个实体bean?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。maven依赖:<dependency>&nbs...
    99+
    2023-06-06
  • 利用Java如何实现一个随机生成动态验证码功能
    利用Java如何实现一个随机生成动态验证码功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言相对来说呢,jpg格式的相对来说容易破解一点,当然也取决于你的干扰元素,元素...
    99+
    2023-05-31
    java 动态 验证码
  • Go如何利用反射reflect实现获取接口变量信息
    本篇内容主要讲解“Go如何利用反射reflect实现获取接口变量信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go如何利用反射reflect实现获取接口变量信息”吧!引言反射是通过实体对象获...
    99+
    2023-06-30
  • Mybatis-plus如何提前获取实体类用雪花算法生成的ID
    Mybatis-plus中,通过设置@TableId可以让Mybatis-plus自动为我们生成雪花算法的ID号,该ID号是一个长整型数据,非常方便。但是雪花算法的ID号是在Inse...
    99+
    2022-11-13
  • Java如何实现动态获取文件的绝对路径
    本文小编为大家详细介绍“Java如何实现动态获取文件的绝对路径”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现动态获取文件的绝对路径”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言我们知道在 J...
    99+
    2023-07-05
  • vue中如何使用echarts实现动态数据绑定及获取后端接口数据
    本篇内容主要讲解“vue中如何使用echarts实现动态数据绑定及获取后端接口数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue中如何使用echarts实现动态数据绑定及获取后端接口数据”...
    99+
    2023-07-02
  • 用户的MAC地址如何利用java实现获取
    用户的MAC地址如何利用java实现获取?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java实现获取用户的MAC地址方法:方法一:将本机地址与局域网内其他机器区分开来 p...
    99+
    2023-05-31
    java mac地址 ava
  • 如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成
    短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问。目前国内最稳定最好用的是新浪T.cn短链接。之前新浪提供了长链接转为短链接的API,可以把长链接转为...
    99+
    2023-06-03
  • java利用反射机制如何实现获取对象的值
    本篇文章给大家分享的是有关java利用反射机制如何实现获取对象的值,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。通过反射机制得到对象中的属性和属性值 在对象中private没问...
    99+
    2023-05-31
    java 反射 对象
  • java spring+mybatis整合如何实现今日头条搞笑动态图片的爬取
    java spring+mybatis整合如何实现今日头条搞笑动态图片的爬取,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java spring+mybatis整合实现爬虫之今...
    99+
    2023-06-19
  • 利用java如何实现获取redis数据库的日志信息
    这篇文章给大家介绍利用java如何实现获取redis数据库的日志信息,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。效果展示如下所示:实时监控redis环境信息和日志列表Redis配置在windows下安装的redis,...
    99+
    2023-05-31
    java redis 日志
  • Java中如何使用对象数组实现接口的多态性?
    Java中的多态性是面向对象编程中的一个重要概念,它允许不同的对象通过同一个接口来实现不同的行为。在Java中,我们可以使用对象数组来实现接口的多态性,下面我们将详细介绍这个过程。 首先,我们需要定义一个接口,以便我们可以在不同的类中实现它...
    99+
    2023-11-09
    接口 对象 数组
  • 如何在java项目中利用google的身份验证器实现一个动态口令验证功能
    这篇文章给大家介绍如何在java项目中利用google的身份验证器实现一个动态口令验证功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。google身份验证器的原理是什么呢?客户端和服务器事先协商好一个密钥K,用于一次...
    99+
    2023-05-31
    google ava java
  • 如何在 Java 编程中利用算法和接口打包实现更高效的代码?
    Java 是一种广泛应用的编程语言,具有高效、安全、可靠等优点。在 Java 编程中,算法和接口是两个重要的概念,它们可以帮助我们实现更高效的代码。本文将介绍如何利用算法和接口打包实现更高效的 Java 代码,并演示一些示例代码。 一、算法...
    99+
    2023-10-29
    编程算法 打包 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作