问题标签 [spring-mybatis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
12859 浏览

java - MyBatis TooManyResultsException 用于看似正确的映射

为了解决这个问题,我削减了很多代码。

当我尝试不同的方法来让这个集合正常工作时,我继续收到这个错误:

嵌套异常是 org.apache.ibatis.exceptions.TooManyResultsException: 期望 selectOne() 返回一个结果(或 null),但发现:2

相关对象如下:

我的方法调用有一个接口:

我的结果映射器:

查询返回以下结果(注意:虽然上面的代码只有“measurement_amount”,但我已经包含了实际的最终结果集,以帮助说明为什么我想要/需要取回这两行):

当我拿出收藏品时,我可以让映射器工作。我尝试过使用 javaType 并尝试使用集合中的复合键,但它仍然不起作用。我已经用完了想法并查看了大量的帮助帖子,但没有什么特别突出的。

我正在使用带有 UTD 版本的 mybatis 和 mybatis-spring 的 Spring Boot

0 投票
0 回答
220 浏览

spring - 使用 Spring JavaConfig 的 SqlSessionTemplate 没有范围代理

我正在尝试使 MyBatis Mappers 可序列化(有点)。为此,我只想SqlSessionTemplate通过 Java 配置将(这是不可序列化的东西)包装到一个作用域代理中......

不幸的是,这不起作用,因为似乎要创建 SqlSessionTemplate 的范围代理,但最终注入 Mapper 的仍然是一个标准SqlSessionTemplate(而不是它周围的代理),它以某种方式逃脱了代理。有问题的部分似乎是这种方法org.mybatis.spring.SqlSessionTemplate......

当然,this这里指的是原始SqlSessionTemplate对象,而不是它周围的 Proxy。

有没有办法强制我的作用域代理进入映射器?

当然,有效的方法是简单地使映射器本身成为范围代理,但这似乎不太优雅和简洁(并且需要我跳过对映射器的自动扫描,而是手动声明每个映射器),所以我更愿意制作有问题的对象一个作用域代理,因为它MapperProxy本身已经是可序列化的并且可以被序列化 - 它只是被SqlSessionTemplate.

编辑:当然还有一个问题是SqlSessionTemplate 没有默认构造函数,这也是一个问题,但一次一个......

0 投票
3 回答
1886 浏览

java - 获取在同一事务中使用@Transactional 插入的数据

我在一种方法(has @Transactional(propagation = Propagation.Required))中插入数据,但在另一种方法(has @Transactional(propagation = Propagation.Required))中,如果我尝试获取相同的数据,它会给出 null。

两种方法都写在服务层@Transactional (rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)

如何获取插入到同一事务中的数据。就像是 :-

0 投票
1 回答
8474 浏览

spring-mvc - 如何在 Spring 中为 MyBatis SQL 查询配置 Log4j?

我有一个带有 mybatis 3.3.0 和 mybatis-spring 1.2.3 的 Spring MVC 项目,我想在我的项目中配置 log4j。而且我没有mybatis-config.xml用于设置 mybatis sql session factory。所以我不能使用以下设置,

所以,我有以下配置

spring-context.xml ,

并配置了这个log4j.xml

上面的配置不打印执行的 sql 查询或准备好的语句。因此,如mybatis 日志记录页面和此答案中所述,我使用了 log4j.properties 而不是 xml 配置,

log4j.properties

我也从 pom.xml 中删除了 common-logging。但这似乎也行不通。

  • 如何设置 MyBatis 打印所有的 sql 查询(PreparedStatements)?
  • 如果 MyBatis 没有检测到 log4j,有没有办法告诉 MyBatis 使用 log4j 作为默认的日志框架而不使用mybatis-config.xml
0 投票
4 回答
13174 浏览

java - Spring with MyBatis:预期单个匹配 bean 但找到 2

我一直在使用 Spring 和 MyBatis,它在单个数据库中运行得非常好。我在尝试添加另一个数据库时遇到了困难(请参阅Github 上的可重现示例)。

我正在使用 Spring Java 配置(即不是 XML)。我见过的大多数示例都展示了如何使用 XML 来实现这一点。

我有两个这样的数据配置类(A & B):

两个映射器和一个自动连接映射器的服务:

应用程序无法启动:

我读过可以使用@Qualifier注释来消除自动装配的歧义,尽管我不确定在哪里添加它。

你能看出我哪里错了吗?

0 投票
1 回答
241 浏览

mybatis - Javers and MyBatis integration help needed

I'm having issues trying to get MyBatis and Javers (with Spring) integrated and working. I've followed instructions at http://javers.org/documentation/spring-integration/ and gotten the Aspect setup, and annotated my entity class and registered it with Javers, and the MyBatis interface correctly annotated with @Repository and @JaversAuditable on the appropriate methods, but still haven't gotten it to work, even setting breakpoints in the Javers Aspect, but nothing triggers.

I've also gone about it the other way, using MyBatis plugin interceptor, as per http://www.mybatis.org/mybatis-3/configuration.html#plugins (then used http://www.mybatis.org/spring/xref-test/org/mybatis/spring/ExecutorInterceptor.html as a basic example for commits). However while it's triggering, it's not doing what I expected and is basically just an aspect around on the commit method, which takes a boolean rather than containing which entity(ies) are being commited which would let me pass them to Javers. I suppose I could add an interceptor on the update/insert MyBatis methods, and then stored that in a ThreadLocal or similar so that when commit/rollback was called I could pass it to Javers as necessary, but that's messy.

I've got no clue where to go from here, unless someone can see something I've missed with one of those 2 methods.

0 投票
1 回答
427 浏览

sql - web项目中配置mybatis打印sql失败

我使用的是:spring 4.2.3+MyBatis 3.4,想配置mybatis打印出sql。配置如下:

当crud时,什么都没有打印出来

我犯了什么错误?如何修复它以确保打印出 sql?

我读过这个:

只是想知道,在一个web项目中,mybatis是否会自动与spring共享相同的log4j配置?或者我应该在applicationContext.xml中添加一些配置条目以确保共享?

0 投票
1 回答
1265 浏览

java - 事务管理似乎不适用于 Spring 测试

我希望在 with 方法完成后将数据写入数据库@Transactional。在使用 HSQL 数据库时,这是我的 JUnit 测试的有效假设吗?我使用 HSQL db 进行开发,使用 Oracle 进行部署的应用程序。Web App 部署在 WebSphere 上,使用 RSA 开发。下面是我的配置总结,包括 POM 和 junit 测试:

0 投票
1 回答
3266 浏览

mybatis - 批量算子的 MyBatis 性能

我用过 MyBatis-spring + Java。我需要在一个事务中将 >10000 条记录插入表中。为此,我使用了映射器:

并将 List 传递给该语句。对于 2000-3000 条记录,它的工作速度非常慢,但是插入 10000 条记录超过 4 分钟(我应该增加超时间隔)!通过 PgAdmin 将相同的 10000 条记录插入到同一个数据库的时间不到 10 秒。我试图追踪这个操作的处理,发现了一个瓶颈

StatementHandler 的计算时间为几分钟,prepareStatement 的计算时间为几分钟。我明白,为什么会这样:10000 条记录,每条记录有 9 个字段。所有这些 100k 字段都应作为参数插入到语句中。我怎样才能加速这个过程?

更新:

我使用 sqlFactory 和 @Transactional 的“BATCH”模式实现了批量保存。这是 mybatis-spring XML 配置的配置:

然后,我实现了一个“批处理”方法:

映射器- 是实体引用的 XML 映射器:

它工作得很快

0 投票
5 回答
5484 浏览

spring-boot - mybatis-spring-boot, org.apache.ibatis.binding.BindingException: 无效的绑定语句

mybatis-spring-boot-sample

我添加了一项服务以通过@Autowired 获取 CityMapper,但它失败了。我更改了一些内容,如下所示:

添加服务:

它的实现:

和 CityMapper :

并且错误显示: