返回顶部
首页 > 资讯 > 后端开发 > Python >java executor包参数处理功能
  • 131
分享到

java executor包参数处理功能

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

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

摘要

sql语句中的参数赋值是有由executor包中的parameter子包完成的。 parameter子包其实只有一个parameterHandler接口,它定义了2个方法: publ

sql语句中的参数赋值是有由executor包中的parameter子包完成的。

parameter子包其实只有一个parameterHandler接口,它定义了2个方法:

public interface ParameterHandler {

  Object getParameterObject();

  void setParameters(PreparedStatement ps)
      throws SQLException;

}

ParameterHandler接口有一个默认的实现类DefaultParameterHandler,它在scripting包的子包中。

mybatis中支持进行参数设置的语句类型是PreparedStatement接口及其子接口CallableStatement, 所以setParameters的输入参数是PreparedStatement类型。

setParameters方法的实现逻辑就是依次取出每个参数的值,然后根据参数类型调用PreparedStatement中的赋值方法进行赋值。

public class DefaultParameterHandler implements ParameterHandler {
  // 类型处理器注册表
  private final TypeHandlerReGIStry typeHandlerRegistry;
  // MappedStatement对象(包含完整的增删改查节点信息)
  private final MappedStatement mappedStatement;
  // 参数对象
  private final Object parameterObject;
  // BoundSql对象(包含SQL语句、参数、实参信息)
  private final BoundSql boundSql;
  // 配置信息
  private final Configuration configuration;

  public DefaultParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
    this.mappedStatement = mappedStatement;
    this.configuration = mappedStatement.getConfiguration();
    this.typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry();
    this.parameterObject = parameterObject;
    this.boundSql = boundSql;
  }

  @Override
  public Object getParameterObject() {
    return parameterObject;
  }

  
  @Override
  public void setParameters(PreparedStatement ps) {
    ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId());
    // 取出参数列表
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    if (parameterMappings != null) {
      for (int i = 0; i < parameterMappings.size(); i++) {
        ParameterMapping parameterMapping = parameterMappings.get(i);
        // ParameterMode.OUT是CallableStatement的输出参数,已经单独注册。故忽略
        if (parameterMapping.getMode() != ParameterMode.OUT) {
          Object value;
          // 取出属性名称
          String propertyName = parameterMapping.getProperty();
          if (boundSql.hasAdditionalParameter(propertyName)) {
            // 从附加参数中读取属性值
            value = boundSql.getAdditionalParameter(propertyName);
          } else if (parameterObject == null) {
            value = null;
          } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
            // 参数对象是基本类型,则参数对象即为参数值
            value = parameterObject;
          } else {
            // 参数对象是复杂类型,取出参数对象的该属性值
            MetaObject metaObject = configuration.newMetaObject(parameterObject);
            value = metaObject.getValue(propertyName);
          }
          // 确定该参数的处理器
          TypeHandler typeHandler = parameterMapping.getTypeHandler();
          JdbcType jdbcType = parameterMapping.getJdbcType();
          if (value == null && jdbcType == null) {
            jdbcType = configuration.getJdbcTypeForNull();
          }
          try {
            // 此方法最终根据参数类型,调用java.sql.PreparedStatement类中的参数赋值方法,对SQL语句中的参数赋值
            typeHandler.setParameter(ps, i + 1, value, jdbcType);
          } catch (TypeException | SQLException e) {
            throw new TypeException("Could not set parameters for mapping: " + parameterMapping + ". Cause: " + e, e);
          }
        }
      }
    }
  }

}

到此这篇关于java executor包参数处理功能 的文章就介绍到这了,更多相关executor包参数处理功能 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java executor包参数处理功能

本文链接: https://lsjlt.com/news/139296.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java executor包参数处理功能
    sql语句中的参数赋值是有由executor包中的parameter子包完成的。 parameter子包其实只有一个parameterHandler接口,它定义了2个方法: publ...
    99+
    2024-04-02
  • java的executor包有什么功能
    本篇内容主要讲解“java的executor包有什么功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java的executor包有什么功能”吧!sql语句中的参数赋值是有由executor包中...
    99+
    2023-06-29
  • mybatis源码解读-Java中executor包的语句处理功能
    目录1.mybatis对多语句类型的支持2.mybatis的语句处理功能1.mybatis对多语句类型的支持 在mybatis映射文件中传参数,主要用到#{} 或者 ${}. #{}...
    99+
    2024-04-02
  • executor包执行器功能
    Executor接口基于以下方法可以完成增,删,改查以及事务处理等操作。事实上,mybatis中的所有数据库操作是通过调用这些方法实现的。 public interface Exec...
    99+
    2024-04-02
  • mybatis源码解读之executor包语句处理功能
    1.mybatis对多语句类型的支持 在mybatis映射文件中传参数,主要用到#{} 或者 ${}. #{}:表示使用这种符号的变量会以预编译的形式赋值到sql片段中。 ${}:表...
    99+
    2024-04-02
  • mybatis的executor包语句处理功能源码分析
    这篇“mybatis的executor包语句处理功能源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mybatis的e...
    99+
    2023-06-29
  • mybatis源码解读之executor包懒加载功能
    ProxyFactory是创建代理类的工厂接口,其中的setProperties方法用来对工厂进行属性设置,但是mybatis内置的两个实现类都没有实现该接口,所以不支持属性设置。c...
    99+
    2024-04-02
  • mybatis中如何实现executor包懒加载功能 
    这篇文章主要为大家展示了“mybatis中如何实现executor包懒加载功能 ”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mybatis中如何实现executor包懒加载功能&nb...
    99+
    2023-06-29
  • Java中怎么处理中文参数
    本篇文章给大家分享的是有关Java中怎么处理中文参数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。    GET中文乱码 &n...
    99+
    2023-06-02
  • 解锁 Java JSON 处理的强大功能
    JSON 处理在 Java 中的重要性 JSON 是一种轻量级的数据交换格式,在 Java 应用程序中广泛应用于数据持久化、网络通信和配置管理。熟练掌握 JSON 处理技术至关重要,以确保应用程序与外部系统和设备的无缝集成。 流行的 J...
    99+
    2024-03-07
    JSON、Java、libGDX、解析、序列化、验证
  • 如何使用 ASP 教程中的打包功能来处理数组?
    ASP语言是一种非常流行的Web开发语言,它提供了很多便捷的功能和工具,其中打包功能是非常实用的。在ASP中,我们经常需要处理数组,而使用打包功能可以更加方便地操作数组。本文将介绍如何使用ASP教程中的打包功能来处理数组。 一、打包功能的基...
    99+
    2023-08-02
    教程 打包 数组
  • PHP的打包功能如何优化大数据文件的处理?
    PHP是一种广泛使用的编程语言,用于开发Web应用程序和脚本。在处理大型数据文件时,PHP提供了一些有用的打包功能,可以大大优化文件处理的效率。本文将探讨如何使用PHP的打包功能优化大数据文件的处理。 什么是打包功能? 打包功能是PHP...
    99+
    2023-07-29
    打包 大数据 文件
  • SpringBoot处理请求参数中包含特殊符号
    今天写代码遇到了一个问题,请求参数是个路径“D:/ExcelFile”,用postman测试时遇到的下图中的报错 java.lang.IllegalArgumentExceptio...
    99+
    2024-04-02
  • 解密AJAX参数:详解常见参数及其功能
    AJAX参数大揭秘:详解常用参数及其作用,需要具体代码示例 在现代Web开发中,AJAX(Asynchronous JavaScript and XML)已经成为了不可或缺的一部分。它通过JavaScript和XML(现在通常是...
    99+
    2024-01-26
    作用 常用
  • JS处理数据实现分页功能
    这几天有小伙伴讨论起了分页的相关问题,这里我也简单讲下前端如何简单便捷的利用Js(库)写出优雅,好用的分页工具。 分页是个很简单又超多接触的技术点,粗略来讲分如下两种: 真分页&md...
    99+
    2024-04-02
  • SpringBoot如何处理请求参数中包含特殊符号
    这篇文章主要介绍SpringBoot如何处理请求参数中包含特殊符号,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!今天写代码遇到了一个问题,请求参数是个路径“D:/ExcelFile”,用postman测试时遇到的下图...
    99+
    2023-06-20
  • SpringBoot统一功能处理
    前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 本章是讲Spring Bo...
    99+
    2023-09-03
    spring boot java 后端
  • 如何利用Java处理Jmeter接口常用参数
    本篇内容主要讲解“如何利用Java处理Jmeter接口常用参数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何利用Java处理Jmeter接口常用参数”吧!问题一、签名参数sign算法由文字描...
    99+
    2023-06-02
  • Java图像处理框架Marvin的功能有哪些
    这篇文章将为大家详细讲解有关Java图像处理框架Marvin的功能有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Marvin 1.4.0 发布了,该版本包含新的插件接口,允许开发者插入...
    99+
    2023-06-17
  • cv2.cvtcolor()的功能与参数是什么
    cv2.cvtColor()函数用于将图像从一个颜色空间转换为另一个颜色空间。它的参数包括: image:要转换的图像 code:...
    99+
    2024-03-01
    cv2.cvtcolor()
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作