我在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类为第一个查询打开了一个连接,然后关闭它(愚蠢地),并为第二个查询打开一个新连接。 / p>
我该如何解决这个问题?
答案 0 :(得分:1)
我不确定我的答案是否100%准确,因为我没有使用MyBatis,但听起来你的问题与这个框架并不完全相关。
通常,如果不以某种方式指定事务边界,则每次调用spring ORM或JDBC api都将在从dataSource / connectionPool为此调用检索的连接中执行。
您可以使用事务来确保使用相同的连接或手动管理连接。我推荐前者,这就是如何使用spring db apis。
答案 1 :(得分:0)
希望这会有所帮助
@Resource
public void setSqlSessionFactory(DefaultSqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
SqlSession sqlSession = sqlSessionFactory.openSession();
YourMapper ym = sqlSession.getMapper(YourMapper.class);
ym.getSqlCalcFoundRows();
Integer count = pm.getFoundRows();
sqlSession.commit();
sqlSession.close();