sách gpt4 ăn đã đi

Mybaits triển khai mã để in câu lệnh sql

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 25 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN Mybaits này triển khai mã lệnh in câu lệnh SQL do tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

Bản thân Mybatis không cung cấp việc triển khai nhật ký nhưng các thành phần của bên thứ ba được giới thiệu. Mybatis hỗ trợ nhiều plug-in nhật ký của bên thứ ba. Mức độ ưu tiên từ thấp đến cao là slf4J, commonsLoging, Log4J2, Log4J và JdkLog.

Có một LogFactory trong mybatis, lấy lớp nhật ký xuất xưởng. Bạn có thể quay lại quá trình triển khai nhật ký tương ứng trong lớp kỹ thuật. Phân tích lớp kỹ thuật, bạn có thể tìm hiểu cách mybatis chọn nhật ký.

?
1
2
3
4
5
6
7
công cộng tĩnh Nhật ký getLog(String logger) {
  thử {
  trở lại logConstructor.newInstance(logger);
  } nắm lấy (Có thể ném t) {
  ném mới Ngoại lệ Nhật ký( "Lỗi khi tạo logger cho logger" + người ghi nhật ký + ". Gây ra: " + t, t);
  }
}

Quá trình tải logConstructor như sau.

?
1
2
3
4
5
6
7
8
tĩnh {
  thửImplementation(LogFactory::useSlf4jLogging);
  thửImplementation(LogFactory::useCommonsLogging);
  thửImplementation(LogFactory::useLog4J2Logging);
  thửImplementation(LogFactory::useLog4JLogging);
  thửImplementation(LogFactory::useJdkLogging);
  thửImplementation(LogFactory::useNoLogging);
}
?
1
2
3
4
5
6
7
8
9
riêng tư tĩnh vô hiệu tryImplementation(Có thể chạy được có thể chạy được) {
  nếu như (logConstructor == vô giá trị ) {
  thử {
   runnable. chạy();
  } nắm lấy (Có thể ném t) {
   // phớt lờ
  }
  }
}

Trong tryImplementation, loại nhật ký được mybatis sử dụng sẽ được đặt. Sau khi thiết lập nhật ký được tham chiếu cho logConstructor, các loại nhật ký khác sẽ không được tải sau này. Do đó, mức độ ưu tiên trong mybatis từ thấp đến cao là slf4J, commonsLoging, Log4J2, Log4J và JdkLog. Có vẻ như đây cũng là một phương pháp triển khai SPI. Sự khác biệt là nhiều loại nhật ký của bên thứ ba không thể tạo thành một giao diện thống nhất. Vì vậy, để giải quyết vấn đề này, mybatis sử dụng chế độ bộ chuyển đổi.

Mybaits triển khai mã để in câu lệnh sql

Việc triển khai bộ điều hợp thường cho phép bộ điều hợp triển khai hoặc kế thừa mục tiêu và lưu giữ một tham chiếu nội bộ đến bộ điều hợp. Việc gọi phương thức đối tượng đích theo cách này thực ra gọi phương thức của bộ chuyển đổi.

Mybatis sử dụng nhật ký này như thế nào? Theo thói quen của mybatis, nên sử dụng chế độ proxy để in nhật ký này. Ví dụ: xem câu lệnh truy vấn và tìm câu lệnh truy vấn cuối cùng dựa trên MapperProxy.

?
1
2
3
4
5
6
7
8
9
10
11
công cộng Danh sách doQuery(MappedStatement ms, Tham số đối tượng, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) ném Ngoại lệ SQL {
  Câu lệnh stmt = vô giá trị ;
  thử {
  Cấu hình cấu hình = ms.getConfiguration();
  Trình xử lý StatementHandler = configuration.newStatementHandler(wrapper, ms, tham số, rowBounds, resultHandler, boundSql);
  stmt = prepareStatement(trình xử lý, ms.getStatementLog());
  trở lại handler.query(stmt, resultHandler);
  } Cuối cùng {
  đóng câu lệnh(stmt);
  }
}
?
1
2
3
4
5
6
7
riêng tư Câu lệnh prepareStatement(StatementHandler handler, Log statementLog) ném Ngoại lệ SQL {
  Tuyên bố stmt;
  Kết nối kết nối = getConnection(statementLog);
  stmt = handler.prepare(kết nối, giao dịch.getTimeout());
  handler.parameterize(stmt);
  trở lại stmt;
}
?
1
2
3
4
5
6
7
8
được bảo vệ Kết nối getConnection(Log statementLog) ném Ngoại lệ SQL {
  Kết nối kết nối = transaction.getConnection();
  nếu như (statementLog.isDebugEnabled()) {
  trở lại ConnectionLogger.newInstance(kết nối, statementLog, queryStack);
  } khác {
  trở lại sự liên quan;
  }
}

Ở đây bạn có thể thấy rằng khi mybatis có được kết nối, nó sẽ xác định xem có tạo lớp proxy hay không dựa trên mức độ in của nhật ký. Tại thời điểm này, về cơ bản bạn có thể đoán rằng trong lớp proxy, mybatis sẽ in câu lệnh SQL.

?
1
2
3
4
5
công cộng tĩnh Kết nối newInstance(Kết nối conn, Câu lệnh nhật kýLog, số nguyên truy vấnStack) {
  Trình xử lý InvocationHandler = mới ConnectionLogger(conn, statementLog, queryStack);
  ClassLoader cl = Kết nối. lớp học .getClassLoader();
  trở lại (Kết nối) Proxy.newProxyInstance(cl, mới Lớp[]{Kết nối. lớp học }, trình xử lý);
}

Sử dụng ConnectionLogger làm ví dụ và xem phương thức gọi bên trong.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
công cộng Đối tượng invoke(Proxy đối tượng, Phương thức phương pháp, Đối tượng[] params)
  ném Có thể ném {
  thử {
  nếu như (Sự vật. lớp học .equals(phương thức.getDeclaringClass())) {
   trở lại phương pháp.invoke( cái này , tham số);
  }
  nếu như ( "chuẩn bị câu lệnh" .equals(phương thức.getName())) {
   nếu như (isDebugEnabled()) {
   gỡ lỗi( " Chuẩn bị: " + removeBreakingWhitespace((Chuỗi) tham số[ 0 ]), ĐÚNG VẬY );
   }
   PreparedStatement stmt = (PreparedStatement) phương thức.invoke(kết nối, tham số);
   stmt = PreparedStatementLogger.newInstance(stmt, statementLog, queryStack);
   trở lại stmt;
  } khác nếu như ( "chuẩn bịGọi" .equals(phương thức.getName())) {
   nếu như (isDebugEnabled()) {
   gỡ lỗi( " Chuẩn bị: " + removeBreakingWhitespace((Chuỗi) tham số[ 0 ]), ĐÚNG VẬY );
   }
   PreparedStatement stmt = (PreparedStatement) phương thức.invoke(kết nối, tham số);
   stmt = PreparedStatementLogger.newInstance(stmt, statementLog, queryStack);
   trở lại stmt;
  } khác nếu như ( "createStatement" .equals(phương thức.getName())) {
   Câu lệnh stmt = (Câu lệnh) method.invoke(connection, params);
   stmt = StatementLogger.newInstance(stmt, statementLog, queryStack);
   trở lại stmt;
  } khác {
   trở lại method.invoke(kết nối, tham số);
  }
  } nắm lấy (Có thể ném t) {
  ném ExceptionUtil.unwrapThrowable(t);
  }
}

Như bạn có thể thấy, mybatis cũng có thể tạo các lớp proxy cho các tình huống cụ thể. Lớp proxy lại được ủy quyền, đây cũng là phương pháp lập trình mà mybatis thích. Ví dụ: các plugin cũng được lớp proxy ủy quyền lại để đạt được nhiều plugin song song.

Đến đây là kết thúc bài viết về code để Mybaits in câu lệnh sql. Để biết thêm thông tin về Mybaits in câu lệnh sql, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt qua các bài viết liên quan bên dưới, mong các bạn sẽ ủng hộ tôi trong thời gian tới! .

Liên kết gốc: https://juejin.im/post/5f0dbfed6fb9a07ec07b4888.

Cuối cùng, bài viết này về mã để Mybaits triển khai in câu lệnh sql kết thúc tại đây. Nếu bạn muốn biết thêm về mã để Mybaits triển khai in câu lệnh sql, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. ủng hộ tôi trong tương lai blog của tôi! .

25 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress