Tôi đang sử dụng MyBatis vào mùa xuân 3. Bây giờ tôi cố gắng thực hiện hai truy vấn sau,
CHỌN SQL_CALC_FOUND_ROWS() *
TỪ phương tiện m, hợp đồng_url_${hợp đồng_id} c
Ở ĐÂU m.media_id = c.media_id VÀ
m.media_id = ${media_id}
GIỚI HẠN ${offset}, ${limit}
SELECT FOUND_ROWS()
Bằng cách này, tôi có thể truy xuất tổng số hàng cho truy vấn đầu tiên mà không cần thực hiện việc đếm (*) khác.
Tuy nhiên, cái thứ hai luôn trả về 1, vì vậy tôi đã mở nhật ký và phát hiện ra rằng lớp SqlSessionDaoSupport đã mở kết nối cho truy vấn đầu tiên, sau đó (ngu ngốc) đóng nó lại và mở một kết nối mới cho truy vấn thứ hai.
Làm thế nào tôi có thể giải quyết vấn đề này?
Tôi không chắc câu trả lời của mình có chính xác 100% hay không vì tôi không có kinh nghiệm với MyBatis, nhưng có vẻ như câu hỏi của bạn không hoàn toàn liên quan đến khuôn khổ này.
Nói chung, nếu bạn không chỉ định ranh giới giao dịch theo một cách nào đó, thì mọi lệnh gọi tới api Spring ORM hoặc JDBC sẽ được thực thi trong kết nối được truy xuất từ dataSource/connectionPool.
Bạn có thể sử dụng các giao dịch để đảm bảo rằng kết nối tương tự được duy trì hoặc bạn có thể quản lý kết nối theo cách thủ công. Tôi khuyên bạn nên sử dụng cái trước, đó là cách sử dụng api db mùa xuân.
Tôi là một lập trình viên xuất sắc, rất giỏi!