当前位置: 首页 > 知识库问答 >
问题:

将自定义位置条件与 JDBI 删除向导一起使用

都乐逸
2023-03-14

我正在尝试使用dropw的JDBI探索,我的客户代码如下所示。

public interface UserDao {
@SqlQuery("SELECT FROM `t_user` :cond")
@Mapper(UserMapper.class)
List<User> fetch(@Bind("cond") String cond);
}

并尝试使用以下代码调用

Application.getJdbi().onDemand(UserDao.class).fetch("where logon_id="+p.getEmail()+"'");

并得到下面的问题

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `t_user` 'where logon_id=sanjaypatel2525@gmail.com\''' at line 1

我得到报价问题,因为这是作为字符串传递的。通过这种方式,我试图实现所有查询的公共where子句代码。我的问题是1.如何解决这个问题。2.这是正确的编码方式吗?或者我们可以使用预先准备好的语句。如果是,那么如何。

非常感谢提前:)

共有3个答案

袁飞鹏
2023-03-14

我已经为JDBI编写了一个Freemarker集成模块,它可以动态生成SQL,而不是JDBI使用@Define提供的简单字符串替换功能

https://github.com/jhsheets/jdbi-freemarker

李景天
2023-03-14

DAO接口必须使用注释@UseStringTemplate3StatementLocator。然后,您可以将“动态”sql与一起使用

@UseStringTemplate3StatementLocator
public interface UserDao {
   @SqlQuery("SELECT FROM `t_user` <cond>")
   @Mapper(UserMapper.class)
   List<User> fetch(@Bind("cond") String cond);
}

对于工作@UseStringTemplate3statmentLocator注解项目需要antlr: string模板maven依赖项:

<dependency>
  <groupId>antlr</groupId>
  <artifactId>stringtemplate</artifactId>
  <version>3.0</version>
</dependency>

万志专
2023-03-14

对动态查询使用Define而不是Bind。

public interface UserDao {
 @SqlQuery("SELECT * FROM t_user :cond")
 @Mapper(UserMapper.class)
 List<User> fetch(@Define("cond") String cond);
}
 类似资料:
  • 我可以使用注释将jdbi查询的结果映射到我感兴趣的bean,如下所示: 如果应用程序中使用的实例尚未注册到任何自定义映射器中,则此操作很好。 此映射器在应用程序开始时注册到实例,如下所示: 重写方法,并提供逻辑将任何类型的结果从数据库转换为相关的bean类型。正是这个uber转换器负责整个应用程序中所有DB到POJO的转换。 我的问题是:有没有一种方法可以告诉继续使用这个将结果从数据库转换为所有类

  • 问题内容: 我无法让spring-data-elasticsearch适用于Elasticsearch 2.0+版本。 关于使用以下POM 并添加自定义的ElasticsearchConfiguration 在 Application.java* 下面 * 在有效的POM中,我仍然收到elasticsearch 1.5.2(以及附加的2.0.1.RELEASE版本)作为依赖项。 在运行应用程序时收

  • 问题内容: 我知道Android 很棒。它使我们能够播放本地文件以及媒体流。而且非常容易使用(例如): 通过调用具有不同参数集的重载,可以设置不同类型的DataSource 。这个函数有一个有趣的原型: 看起来可以用自己的实现完全覆盖。它确实有效: 并在主要代码中: 是的,这很好。但是,如果我尝试音频/ aacp广播流(例如:“ http://111.223.51.8:8005”-它是“ COOL

  • 问题内容: 以下代码基于javadocs中java.util.zip.Deflater给出的示例。我所做的唯一更改是创建一个称为dict的字节数组,然后使用setDictionary(byte [])方法在Deflater和Inflater实例上设置字典。 我看到的问题是,当我使用与Deflater使用的数组完全相同的数组调用Inflater.setDictionary()时,出现了Illegal

  • 问题内容: 我只是开始看一下Mattt出色的新Alamofire快速联网库,并且不确定如何将其与自定义标头一起使用。 我正在尝试从AFNetworking转换为Alamofire的代码是这样的: 问题答案: 根据官方文档,不建议修改会话配置: 不建议将其用于Authorization或Content- Type标头。而是分别使用URLRequestConvertible和ParameterEnco

  • 我是Gradle/Groovy的新手,所以我可能遗漏了一些显而易见的东西。你能帮忙吗? 我们使用Ivy进行依赖管理。我正在试用Gradle,希望与我们现有的常春藤基础设施集成。通常情况下,这应该是可能的,但我们的常春藤的布局有点特别,而且...我不能让它工作。 这是因为我们的常春藤在布局时考虑了组织的url,例如: 我现在试着把这句话翻译成Gradle: 这当然是失败的,因为“[organizat