我在 Spring 3 上使用 MyBatis。现在我尝试执行以下两个查询,
SELECT SQL_CALC_FOUND_ROWS() *
FROM media m, contract_url_${contract_id} c
WHERE m.media_id = c.media_id AND
m.media_id = ${media_id}
LIMIT ${offset}, ${limit}
SELECT FOUND_ROWS()
这样我就可以检索第一个查询的总行数,而无需另外执行 count(*)。
然而,第二个总是返回1,所以我打开日志,发现SqlSessionDaoSupport类为第一个查询打开一个连接,然后(愚蠢地)关闭它,并为第二个查询打开一个新连接。
我该如何解决这个问题?
我不确定我的答案是否100%准确,因为我没有使用MyBatis的经验,但听起来你的问题与这个框架并不完全相关。
一般来说,如果您没有以某种方式指定事务边界,则对 Spring ORM 或 JDBC api 的每次调用都将在从 dataSource/connectionPool 检索到的连接中执行。
您可以使用事务来确保保持相同的连接,也可以手动管理连接。我推荐前者,这就是 spring db api 的使用方式。
我是一名优秀的程序员,十分优秀!