So sánh chức năng giữa Fluent Mybatis, Mybatis bản địa và Mybatis Plus
In lạiTác giả: qq735679552Thời gian cập nhật: 27-09-2022 22:32:09294
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 blog CFSDN này so sánh các chức năng của Fluent Mybatis, Mybatis bản địa và Mybatis Plus được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm tới bài viết này thì nhớ like nhé.
Mục lục
So sánh ba
Sử dụng mybatis thông thạo để thực hiện các chức năng trên
Thay đổi sang mybatis bản địa để đạt được hiệu quả
Thay đổi sang mybatis plus để đạt được hiệu quả
Tạo so sánh mã hóa mã
cài đặt mã được tạo thông thạo mybatis
cài đặt tạo mã mybatis plus
Danh sách tính năng FluentMybatis
Tóm tắt so sánh của ba
Giới thiệu và mã nguồn Fluent Mybatis
Sử dụng mybatis thông thạo, bạn không cần phải viết các tệp xml cụ thể. Bạn có thể xây dựng các câu lệnh sql kinh doanh phức tạp hơn thông qua api java để đạt được sự tích hợp giữa logic mã và logic sql. Không cần phải tập hợp các hoạt động truy vấn hoặc cập nhật trong Dao và tập hợp các tham số phụ trong xml hoặc trình ánh xạ. Vậy so với Mybatis bản địa, Mybatis Plus hoặc các framework khác, FluentMybatis mang lại những tiện ích gì?
Hãy thực hiện và so sánh thông qua một yêu cầu nghiệp vụ tương đối điển hình. Nếu có bảng điểm học sinh thì cấu trúc như sau.
tạo bảng `student_score`( id bigint auto_increment nhận xét "ID khóa chính" khóa chính, sinh viên_id bigint không null nhận xét "Mã sinh viên", giới tính_man tinyint mặc định 0 không null nhận xét "Giới tính, 0:Nữ; 1:Nam", school_term int null nhận xét "học kỳ", chủ đề varchar(30) null nhận xét "chủ đề", điểm int null nhận xét "điểm", gmt_create datetime không nhận xét null "Thời gian tạo bản ghi", gmt_modified datetime không null nhận xét "Ghi lại thời gian sửa đổi lần cuối", is_deleted tinyint mặc định 0 không null nhận xét "Nhận dạng xóa logic") engine = Bộ ký tự mặc định của InnoDB=utf8;
Hiện nay có một nhu cầu: thống kê về điểm đậu của ba môn học ('tiếng Anh', 'Toán', 'tiếng Trung') vào năm 2000 theo học kỳ, thống kê các môn học về điểm tối thiểu, điểm tối đa và điểm trung bình, và số lượng mẫu cần lớn hơn 1 thì kết quả thống kê như sau Đối với việc sắp xếp học kỳ và môn học, chúng ta có thể viết câu lệnh SQL như sau.
chọn school_term, subject, count(score) làm count, min(score) làm min_score, max(score) làm max_score, avg(score) làm max_scorefrom student_scorewhere school_term >= 2000 và môn học trong ("英语", "数学", "语文") và score >= 60 và is_deleted = 0group by school_term, subjecthaving count(score) > 1order by school_term, subject;
Các yêu cầu trên có thể đạt được bằng cách sử dụng Fluent Mybatis, Native Mybatis và Mybatis plus tương ứng.
。
So sánh ba
。
Sử dụng mybatis thông thạo để thực hiện các chức năng trên
mã cụ thể.
Chúng ta có thể thấy khả năng của api thông thạo và hiệu ứng hiển thị của IDE trên mã.
。
Thay đổi sang mybatis bản địa để đạt được hiệu quả
Xác định giao diện Mapper.
giao diện công khai MyStudentScoreMapper { List<>> summaryScore(SummaryQuery paras);}
SummaryQuery, thực thể tham số cần thiết để xác định giao diện.
@Data@Accessors(chain = true)public class SummaryQuery { private Integer schoolTerm; private List các môn học; private Integer score; private Integer minCount;}
Xác định tệp xml của trình ánh xạ triển khai logic nghiệp vụ.
Triển khai giao diện nghiệp vụ (đây là lớp thử nghiệm, tương ứng với lớp Dao trong các ứng dụng thực tế).
@RunWith(SpringRunner.class)@SpringBootTest(classes = QuickStartApplication.class)public class MybatisDemo { @Autowired Private MyStudentScoreMapper mapper; @Test public void mybatis_demo() { // Xây dựng các tham số truy vấn SummaryQuery paras = new SummaryQuery() .setSchoolTerm(2000 ) .setSubjects(Arrays.asList("Tiếng Anh", "Toán học", "Tiếng Trung")) .setScore(60) .setMinCount(1); Danh sách<>> summary = mapper.summaryScore(paras); .out.println(tóm tắt);
Tóm lại, sử dụng trực tiếp mybatis thì các bước thực hiện còn khá rườm rà và hiệu quả quá thấp. Chuyển sang dùng mybatis plus có tác dụng gì?
。
Thay đổi sang mybatis plus để đạt được hiệu quả
Việc triển khai mybatis plus đơn giản hơn nhiều so với mybatis và hiệu quả triển khai như sau.
Nhưng như được khoanh tròn màu đỏ, việc viết mybatis plus quá trình triển khai sử dụng nhiều chuỗi mã hóa cứng (bạn có thể sử dụng phương thức get lambda của Thực thể để thay thế một phần mã hóa chuỗi). Việc mã hóa cứng các chuỗi sẽ tạo ra rất nhiều rào cản cho các nhà phát triển khi sử dụng. Cá nhân tôi nghĩ có hai điểm chính:
Khó nhớ và gõ tên trường
Lỗi thời gian chạy sau khi thuộc tính Thực thể thay đổi sau trường cơ sở dữ liệu
Các framework khác, chẳng hạn như TkMybatis, yếu hơn mybatis plus về khả năng đóng gói và dễ sử dụng nên sẽ không thể so sánh được.
。
Tạo so sánh mã hóa mã
。
cài đặt mã được tạo thông thạo mybatis
lớp công khai AppEntityGenerator { Chuỗi cuối cùng tĩnh url = "jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8"; public static void main(String[] args) { FileGenerator.build(Abc. class); } @Tables( /** Thông tin kết nối cơ sở dữ liệu**/ url = url, username = "root", mật khẩu = "mật khẩu", /** Đường dẫn gói cha của lớp thực thể**/ basePack = "cn.org.fluent.mybatis.springboot.demo", /** Thư mục nguồn mã thực thể**/ srcDir = " spring-boot-demo/src/main/java", /** Thư mục nguồn mã Dao**/ daoDir = "spring-boot-demo/src/main/java", /** Nếu bảng xác định việc tạo bản ghi, sửa đổi bản ghi và xóa logic các trường **/ gmtCreated = "gmt_create", gmtModified = "gmt_modified", logicDeleted = "is_deleted", /** Bảng nơi tệp cần được tạo (bảng tên: Tên thực thể tương ứng) **/ bảng = @Table(value = {"student_score"}) ) static class Abc { }}
Sau khi đọc cách thực hiện cùng một điểm chức năng của ba khung, bạn chắc chắn sẽ có nhận định của riêng mình. Tác giả cũng đã tóm tắt một so sánh ở đây.
。
-
Mybatis cộng thêm
Mybatis lưu loát
tạo mã
Tạo Entity, Mapper, Wrapper và các tệp khác và Trình tạo rất dễ sử dụng
Chỉ Thực thể được tạo và sau đó Mapper, Query, Update và SqlProvider được tạo thông qua quá trình biên dịch.
Mối quan hệ cộng sinh với Mybatis
Cần thay thế SqlSessionFactoryBean ban đầu
Không có sửa đổi nào đối với Mybatis. Làm thế nào để sử dụng nó như trước đây?
Phương pháp xây dựng SQL động
Khi ứng dụng khởi động, các đoạn xml động được xây dựng dựa trên thông tin chú thích Thực thể và được đưa vào trình phân tích cú pháp Mybatis.
Khi ứng dụng được biên dịch, theo chú thích Thực thể, hãy biên dịch và tạo SqlProvider của phương thức tương ứng, đồng thời sử dụng liên kết chú thích @InsertProvider @SelectProvider @UpdateProvider trên Mapper của mybatis
Các kết quả SQL động có dễ dàng được theo dõi GỠ LỖI không?
Không dễ gỡ lỗi
Thật dễ dàng, chỉ cần xác định vị trí phương thức SQLProvider và đặt điểm dừng
Cấu trúc SQL động
Bằng cách mã hóa cứng tên trường hoặc sử dụng biểu thức lambda của phương thức get của Thực thể
Tạo tên phương thức tương ứng thông qua quá trình biên dịch và gọi phương thức đó trực tiếp.
Phát hiện lỗi sau khi thay đổi trường
Biểu thức lambda của phương thức get có thể được biên dịch và tìm thấy, nhưng không thể biên dịch và tìm thấy mã hóa trường.
Nó có thể được tìm thấy tại thời gian biên dịch
Phương pháp xây dựng SQL động cho các trường khác nhau
Thông qua các thông số giao diện
Thông qua phương thức tên giao diện, hiệu quả mã hóa của FluentAPI cao hơn
Tính năng kết xuất cú pháp
không có
Các biến chính chọn, cập nhật, đặt và hoặc có thể được hiển thị bằng cú pháp IDE, làm cho nó dễ đọc hơn.
。
。
Giới thiệu và mã nguồn Fluent Mybatis
Tài liệu và ví dụ thông thạo Mybatis.
Mã nguồn Mybatis thông thạo, github.
Điều này kết thúc bài viết này về việc so sánh các chức năng của Fluent Mybatis, Mybatis bản địa và Mybatis Plus. Để biết thêm thông tin về Fluent Mybatis, Mybatis bản địa và Mybatis Plus, 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 các bài viết liên quan bên dưới. tất cả các bạn sẽ ủng hộ tôi trong tương lai! .
Liên kết gốc: https://juejin.cn/post/6886019929519177735.
Cuối cùng, bài viết so sánh chức năng của Fluent Mybatis, Mybatis bản địa và Mybatis Plus kết thúc tại đây. Nếu bạn muốn biết thêm về việc so sánh các chức năng của Fluent Mybatis, Mybatis bản địa và Mybatis Plus, vui lòng tìm kiếm CFSDN. Hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi khá chắc chắn rằng mình đang thiếu thứ gì đó nhưng tôi không thể tìm thấy (tức là Google) khả năng tạo tài khoản thử nghiệm cho Google Plus. Tuy nhiên, việc tạo tài khoản người dùng giả để thử nghiệm chắc chắn là không được phép, vậy làm cách nào để thử nghiệm ứng dụng G+ của tôi bằng nhiều tài khoản (của tôi)? hầu hết
Có cách nào để xem danh sách những người đã chia sẻ trang web của bạn với Google Plus (tức là những người đã nhấp vào nút dấu cộng cho một URL cụ thể) không? Việc nhấp vào nút +1 để có câu trả lời hay nhất không hoàn toàn giống với việc chia sẻ câu trả lời đó (chẳng hạn như một phần của sự kiện), nhưng bạn sử dụng Google
Vì vậy, tôi đang cố gắng điền vào một đối tượng các hàng từ cơ sở dữ liệu sqlite của mình như thế này: - (id) initWithSQLite:(sqlite3_stmt *)row andDatabase:(Database*)
Giả sử tôi có một hệ thống mua sắm trực tuyến và có nhiều người dùng đã đăng ký. Tôi muốn có tính năng mà khi tôi thêm sản phẩm mới hoặc chạy khuyến mại cho một sản phẩm cụ thể, trang Google+ của tôi sẽ cập nhật vì thông tin chi tiết về sản phẩm được tự động đăng ở đó. Nó sẽ chỉ được sử dụng cho mục đích hỗ trợ văn phòng.
Tôi điều hành một blog và sử dụng Google Plus làm công cụ quảng cáo, đăng mọi cập nhật lên G+. Vì tôi có hàng trăm người theo dõi nên các bài đăng trên G+ của tôi thường có một số bình luận: Tôi muốn hiển thị chúng trên blog của mình! Tôi biết có những công cụ có thể thực hiện việc này theo G+!
Tôi cần một chút trợ giúp từ bạn trong kịch bản đơn giản này. Tôi đang cố gắng tạo một tập lệnh chạy "taskkill" bằng cách đọc các tiêu đề của Windows, nhưng tôi không biết làm cách nào để nó hoạt động trong C++. Theo như tôi biết thì việc xử lý hàng loạt sẽ rất dễ dàng
map mp; Tôi có thể hiểu đoạn mã sau: mp[1] = 1; mp[2] = 2; mp[3]++; không đặt mp[3] = n; (n có thể là số nguyên). Câu trả lời hay nhất là op của bản đồ
Bất cứ khi nào tôi cần lấy dữ liệu từ bộ đệm, tôi sử dụng phương thức FromCache(). Tôi không đặt bất kỳ chính sách bộ đệm mặc định nào và sử dụng bất kỳ chính sách nào mà EF plus sử dụng theo mặc định. Thời lượng bộ đệm mặc định là bao nhiêu? Đợi một chút? Hay vô tận? tối ưu
Tôi đang triển khai google plus trong ứng dụng của mình. Tôi muốn triển khai chức năng gọi lại sau khi người dùng chia sẻ tin nhắn. Vui lòng cho tôi biết liệu có thể thực hiện gọi lại sau khi nhấp vào nút chia sẻ trong google plus hay không. Cảm ơn trước Pratap Câu trả lời hay nhất bằng cách đặt tổng
Tôi có một ứng dụng sử dụng API Google+ để liệt kê những người trong vòng kết nối của bạn. Điều này hoạt động rất tốt, ngoại trừ một điều: API không cho biết người dùng có hình ảnh hay không hay hình ảnh đó chỉ là phần giữ chỗ (hình bóng màu xanh lam). https://developers.g
Có thể nhúng Google Communities vào các trang web không? Bằng cách này, khách hàng của chúng tôi có thể hưởng lợi từ nội dung và tất cả các tính năng khác trên trang web của chúng tôi, đồng thời cộng tác bằng Google Communities. Lý tưởng nhất là tôi muốn xóa mã Javascript
Tôi có rất nhiều album ảnh trên Google Plus. Tôi đang tìm một cách hiệu quả để tải chúng xuống. Nếu tôi đưa chúng lên Google Drive, tôi có thể sử dụng skicka, điều này có một số khó chịu nhưng nhìn chung hoạt động rất tốt. Tôi đang tìm một
Tôi đang xây dựng một trang web và tôi muốn cho phép đăng nhập Google. Tôi không muốn khách hàng tải ảnh đại diện của họ lên trang web của tôi lần nữa. Tôi có một số manh mối về cách thực hiện điều đó với facebook, nhưng khi người dùng xác thực bằng tài khoản Google,
Tôi muốn hiển thị nguồn cấp dữ liệu sự kiện của các trang facebook, twitter, linkedin, google+ trên trang web của mình. Đối với facebook và twitter, tôi nhận được nguồn cấp dữ liệu bằng cách tham khảo các trang web dành cho nhà phát triển của họ (có đính kèm hình ảnh)
đóng cửa. Câu hỏi này cần tập trung hơn. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện vấn đề này? Câu hỏi được cập nhật để chỉ tập trung vào một vấn đề chỉnh sửa bài đăng này. Đã đóng 8 năm trước. Cải thiện câu hỏi này
Có rất nhiều ví dụ trực tuyến về cách chạy tệp từ Notepad Plus Plus (NPP). Nhưng không ai trong số họ tính đến thực tế rằng thư mục làm việc hiện tại là vị trí của tệp thực thi NPP chứ không phải vị trí của tệp. Thông thường chúng trông như thế này: cm
Sử dụng VIM để chỉnh sửa tệp Tôi có thể dễ dàng sao chép và dán tên tệp (hoặc đường dẫn đầy đủ) tôi đang làm việc (để xem ý tôi là gì với VIM, bạn có thể xem: câu hỏi này hoặc wiki Có cách nào không); để sử dụng Notepad+
Tôi là một lập trình viên xuất sắc, rất giỏi!