当前位置: 首页 > 面试题库 >

一次性为所有MySQL Select查询添加一列

微生学
2023-03-14
问题内容

尝试在运行时向我的Web应用程序中的所有MySQL Select查询添加注释。

例如,代码中的原始查询如下所示:

select a,b,c from ......
select x,y from...

所有这些都需要 在运行时 修改为:

select a,b,c /*Comment*/ from ...
select x,y /*Comment*/ from ...

该应用程序在Hibernate
4.2.1上运行。我能想到的唯一解决方案是扩展org.hibernate.dialect.MySQLDialect并在/*Comment*/中添加CustomMySQLDialect

对于为实现此目的而修改的方法有些困惑。希望任何朝着正确方向的指针。

可以重写transformSelectString(java.lang.String)in方法org.hibernate.dialect.Dialect来做到这一点吗?

编辑1:自定义MySQL方言中的transformSelectString不适用于运行时SQL修改


问题答案:

创建一个自定义数据库拦截器

package com.felix.dao.interceptor;
import org.hibernate.EmptyInterceptor;

public class CustomDBInterceptor extends EmptyInterceptor {

  @Override
  public String onPrepareStatement(String sql) {
    String commentStr = "/*Comment*/"
    return super.onPrepareStatement(commentStr+sql);
  }

}

在Spring Context文件中,为会话工厂配置拦截器:

<bean id="customDBInterceptor" class="com.felix.dao.interceptor.CustomDBInterceptor"/>
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="datasource" />
    <property name="entityInterceptor">
        <ref bean="customDBInterceptor"/>
    </property>
    ...
</bean>

确保自定义数据库拦截器对sessionFactory没有周期性的依赖关系。通过以上操作,将拦截通过会话工厂触发的所有查询,进行修改,然后将其传递给该onPrepareStatement方法。



 类似资料:
  • 问题内容: 我想要一个jQuery进度栏,该进度栏会根据服务器端请求的状态进行更新。我基于本教程编写此代码,但它使用文件上传器作为基础(与此问题相同)。没有文件上传器,我无法使其工作完全相同。问题是进度条仅在process.php完成后才更新。它等待整个过程完成,而不是异步请求进度更新。我只看到数据:数据警报一次。 有任何想法吗? 网页: Process.php-提交表单时调用 javascrip

  • 我正在使用React,使用NodeJS将数据发送到我的PostgreSQL数据库。我的songs表中有一个外键,它引用了albums表中的id。我的问题是,如何将我第一次插入的id返回到第二次插入的相册中?以下是我目前的代码: 我还没有将专辑id添加到我的歌曲插入中。我在等着看如何把唱片id的值输入到我的第二个插页中?

  • 问题内容: 我有有不同的数据类型一样创建625列的SQL Server表,,,等… 现在对将所有列的数据类型更改为感兴趣。是否有一个SQL Server查询可以一次更改一个表中所有列的数据类型,而不是一个一个地对所有列执行下面的查询? 期待您的回应。 问题答案: 没有一个单独的“魔术”项目符号可以执行此操作-这是非常不寻常的操作,因此它本身不受支持。 您可以做的是从系统目录视图中遍历表的列,动态创

  • 本文向大家介绍RowBounds 是一次性查询全部结果吗?为什么?相关面试题,主要包含被问及RowBounds 是一次性查询全部结果吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 RowBounds 表面是在“所有”数据中检索数据,其实并非是一次性查询出所有数据,因为 MyBatis 是对 jdbc 的封装,在 jdbc 驱动中有一个 Fetch Size 的配置,它规定了每次最多从数据库

  • 我正在对PeopleSoft数据库进行查询,不确定是否可以根据初始查询在一次调用中从同一个表中获取信息。例如,我正在访问的表返回EmployeeID、FullName、FirstName、LastName、Position\u NBR和ReportsTo。但是ReportsTo是以经理的Position\u NBR(在同一个表中找到)的形式提供的,我想以name格式提供。我想这样做,但不确定是否可

  • 如何在下面的本机搜索查询中添加查询超时?