Sử dụng Hibernate trong Java Swing Application

Source: netbeans.org
translate by:fly2universe
date: 11.06.2010

Trong bài hướng dẫn này, bạn sẽ sử dụng NetBean IDE để tạo và triển khai một ứng dụng Java Swing để hiển thị dữ liệu từ Cơ sở dữ liệu (CSDL). Ứng dụng này sử dụng Hibernate framework như là một persistence layer để lấy POJOs (plain old Java objects = đối tượng java nguyên thủy) từ  một cơ sở dữ liệu quan hệ.

Hibernate là một framework nó là công cụ để quản lý các ORM (object relational mapping). Bài hướng dẫn này cho thấy việc hổ trợ Hibernate framework trong IDE và làm thế nào để sử dụng wizards tạo các file Hibernate cần thiết. Sau khi tạo một đối tượng Java và cấu hình ứng dụng sử dụng Hibernate bạn tạo một giao diện (GUI) cho việc tìm kiếm và hiển thị dữ liệu.

Ứng dụng bạn xây dựng trong ứng dụng này là một ứng dụng app quản trị DVD Store đồng hành  DVD Store web application. Bài hướng dẫn này bao gồm việc làm thế nào để tạo ra một ứng dụng cho phép bạn truy vấn thông tin của một diễn viên thông qua tên hoặc họ. Nếu muốn bạn có thể  mở rộng ứng dụng để truy vấn thông tin chi tiết về phim ảnh và thêm/sửa/xóa các mục tin. Bài hướng dẫn này sử dụng HQT.CSDL MySQL và CSDL có tên là Sakila, nhưng bạn có thể sử dụng bất kỳ HQT.CSDL nào mà Hibernate hổ trợ. Sakila là một CSDL mẫu bạn có thể tải từ site của MySQL. Thông tin cho việc thiết lập CSDL Sakila được chuẩn bị ở các phần bên dưới.

Trước khi bắt đầu tutorial này bạn có thể từ tìm hiểu các tài liệu sau đây:

Nội dung

  • Tạo database
  • Tạo dự án Java Swing Application
  • Thêm Hibernate đến Project
    • Tạo file config Hibernate
    • Sửa đổi file config
    • Tạo file Helper HibernateUtil.java
  • Sinh ra Hibernate Mapping và Java Class
    • Tạo file Reverse Engineering
    • Tạo Hibernate Mapping Files và POJOs từ Database
  • Tạo GUI
    • Tạo form JFrame
    • Thêm các thành phần vào form
  • Tạo Query trong trình HQL Query Editor
  • Thêm Query đến Form
  • Chạy Project
    • Tải Solution Project
  • Tạo POJOs và Mapping Files Individually (tùy chọn)

để theo bài viết này, bạn cần có các phần mềm và tài nguyên sau:

Software or Resource Version Required
NetBeans IDE 6.8/6.7/6.5 Java
Java Development Kit (JDK) version 6 or version 5
MySQL database server version 5.x
Sakila Database plugin available from update center

Bạn có thể tải file ZIP của project hoàn chỉnh này tại đây

Tạo Database

Trong tutorial này sử dụng CSDL Sakila. CSDL mẫu này thì ko có kèm theo khi cài IDE vì thế bạn cần tạo ra theo hướng dẫn theo sau.

Sakila là một CSDL mẫu miễn phí có thể sử dụng từ  site của MySQL. Để tạo Sakila bạn có thể tải và cài đặt nó bằng Plugins Manager. Sau khi bạn cài xong plugin bạn có thể tạo sakila từ cửa sổ Service. CSDL Sakila thì được thêm vào danh sách của những CSDL trong hộp thoại tạo database của MySQL.

Thông tin chi tiết về việc cấu hình IDE để làm việc với MySQL, bạn có thể tìm trong bài viết này  Connecting to a MySQL Database .

  1. Mở Plugins manager và cài đặt Sakila Sample Database plugin.
  2. Sau khi cài đặt  plugin, bắt đầu chạy Server MySQL bằng cách mở rộng nút Database trên cửa sổ Services,  right-click vào nút MySQL Server và chọn Start.
  3. Right-click vào MySQL Server và chọn Create Database.
  4. Chọn Sakila database từ danh sách xổ xuống New Database Name trong hộp thoại Create MySQL Database . Click OK.

    Khi bạn click OK một nút Sakila sẽ xuất hiện bên dưới MySQL Server.
  5. Right-click vào node Sakila và chọn Connect.

Khi bạn click Connect a database connection node cho Sakila database (jdbc:mysql://localhost:3306/sakila [username on Default]) được liệt dưới Databases node. Khi một kết  nối được mở bạn có thể xem dữ liệu trong data bằng cách mở rộng connection node.

Tạo dự án Java Swing Application

Trong bài tập này bạn sẽ tạo một ứng dụng Java Swing đơn giản là DVDStoreAdmin.

  1. Chọn File > New Project (Ctrl-Shift-N). Chọn Java Application từ  Java category và click Next.
  2. DVDStoreAdmin cho tên của project và chọn đường dẫn để lưu project.
  3. Bỏ chọn vào tùy chọn Use Dedicated Folder nếu nó đang được chọn.
    Theo tutorial này thì rất ít lý do để copy những thư viện đến thư mục dành riêng bởi vì bạn sẽ không cần chia sẽ thư viện cho những người dùng khác.
  4. Bỏ tùy chọn Create Main Class. Click Finish.

Khi bạn click Finish, IDE khởi tạo một dự  án Java application. Dự án không có một main class nào. Bạn sẽ phải tạo một form và khi đó set như là main class.

Thêm Hibernate đến Project

Để thêm sự  trợ giúp cho Hibernate đến dự án J2SE bạn cần thêm thư viện Hibernate đến project. Thư viện Hibernate thì được kèm theo với IDE và có thể được thêm vào bất kỳ dự án nào bằng cách right-click vào node ‘Libraries’ trong cửa sổ  Projects, chọn ”Add Library’ và lựa chọn thư viện Hibernate trong hộp thoại Add Library.

Trình IDE wizards giúp bạn tạo những file Hibernateto bạn có thể cần trong project của bạn. Bạn có thể dùng trình winzards trong IDE để tạo file config Hibernate và lớp utility helper.  Nếu bạn tạo file config bằng wizards thì IDE sẽ tự động thêm thư viện Hibernate vào trong project.

Tạo file config Hibernate

File configuration Hibernate (hibernate.cfg.xml) chứa thông tin về kết nối CSDL, tài nguyên mapping và những thuộc tính kết nối khác. Khi bạn tạo một file config Hibernate sử dụng winzards bạn  other connection properties. When you create a Hibernate configuration file using a wizard chỉ định rõ sự kết nối CSDL bằng cách chọn từ danh sách database đã được đăng ký với IDE. Khi kiến tạo file config IDE tự động thêm những thông tin kết nối chi tiết và thông tin địa phương trên nền database được chọn. IDE cũng tự động thêm những thư viện Hibernate vào classpath của project. Sau khi bạn tạo file cấuh ình bạn có thể tùy chỉnh nó bằng cách sử dụng multi-view editor, hoặc chỉnh trực tiếp trong XML editor.

  1. Right-click vào node Source Packages trong cửa sổ Projects và chọn New > Other để mở New File wizard.
  2. Chọn Hibernate Configuration Wizard từ category Hibernate. Click Next.
  3. Giữ những thiết lập mặc định Keep the default settings trong phần Name and Location  (bạn muốn tạo file trong thư mục src). Click Next.
  4. Chọn kết nối sakila trong danh sách Database Connection. Click Finish.

to be continue….làm biếng rồi, vài bữa tiếp

(c)f2u

Cài đặt thành phần SwingX trong Netbeans

Source : Swinglabs
translate: fly2universe
date: 7.6.2010

Dự án SwingX chứa cả thành phần mở rộng Swing, thành phần Swing mới và APIs. Ví dụ: JXTable là sự mở rộng từ chuẩn JTable. Ngoài ra, JXDatePicker là một thành phần mới cho phép người dùng lựa chọn ngày tháng trong giao diện người dùng (UI). Cả hai là những thành phần trực quan của JavaBean. Trong SwingX cũng có những thành phần JavaBean không trực quan như GlossPainter, LinearGradientPainter, and PinstripePainter.

Tất cả các thành phần của JavaBean, cho dù có trực quan hay không trực quan đều có thể được thêm vào bảng JavaBean (NetBeans palette) và sử dụng từ bên trong Matisse GUI. Bài hướng dẫn này sẽ đi qua quá trình cài đặt và sử dụng từ bên trong NetBeans.

Bước 1: Tải SwingX

Bước đầu tiên là tải SwingX.  Có hai cách để làm điều này.  Cách dễ nhất là để làm điều này là đơn giãn tải SwingX tại trang download. Nếu bạn vào trang rìa cắt, bạn có thể lấy source trực tiếp từ  CVS và build project. Để làm việc này với NetBean, hãy xem tài liệu hướng dẫn sử dụng CVS

Một khi bạn đã tải mã nguồn, tiến hành build project. Từ  dòng lệnh, có thể làm việc này bằng cách thực thi lệnh “ant jar”. hoặc trong NetBeans bạn có thể build project một cách dễ dàng. Một khi build thành công, file swingx.jar sẽ được đặt trong thư mục /dist của dự  án. Tại thời điểm này, bạn sẵn sàng tích hợp thành phần SwingX với bảng palette NetBeans.

Bước 2 : Quản lý thành phần Palette

Work in Progress.

Nội dung của trang này chưa sẵn sàng. Nếu bạn tình cờ có một mô tả tốt về cách làm thế nào để thêm thành phần và làm thế nào để quản lý thành phần Pallete nói chung, hãy giúp chúng tôi cải thiện nội dung của bài hướng dẫn này và cho chúng tôi biết những nội dung đề nghị có thể tại đây.

Bước 3: Làm nổi bật dòng (Row Highlighting)

JXTable hổ trợ kỹ thuật highlighting làm thay đổi màu nền của dòng. Với JTable, bạn có thể cần cung cấp  renderer của riêng bạn để làm được điều này; với JXTable, bạn cung cấp một hay nhiều Highlighters. Một Highlighter thi hành một luật cho việc làm thế nào nền của một dòng được tô màu.

Trong SampleJXTableDemo, chúng tôi sử dụng AlternateRowHighlighter, là một lớp con của Highlighter với thể hiện tỉnh Highlighter được cấu hình sẵn cho tác vụ này. Demo sử dụng AlternateRowHighlighter.classicLinePrinter để làm highligh.

    jxTable.setHighlighters(new HighlighterPipeline(
        new Highlighter[]{ AlternateRowHighlighter.classicLinePrinter }));

Lớp AlternateRowHighlighter thay đổi màu nền của mỗi dòng khác trong bảng. Lớp classicLinePrinter bắt chước bảng màu trên máy in cũ nơi mà mỗi dòng khác đã được tô màu xanh ánh sáng, để giúp cải thiện tính dễ đọc, đặc biệt là trên bảng rộng của dữ liệu.

Một JXTable có thể có một hoặc nhiều Highlighters được chỉ định trong lớp HighlighterPipeline. Khái niệm ‘pipeline’ thì cũng được sử dụng cho bộ lộc và sắp xếp. HighlighterPipeline thì tạo đối tượng với mãng của  Highlighters, nhưng bạn cũng chỉ có thể thêm hoặc gở bỏ Highlighters từ  HighlighterPipeline bằng cách sử dụng hàm addHighlighter() và removeHighlighter(). Trong ví dụ của chúng tôi, chúng tôi sủ dụng một lớp đơn  Highlighter duy nhất để thông qua như là một mãng đến HighlighterPipeline.

Trong demo SampleJXTable, chúng tôi thêm một highlighter thứ hai sau khi chuột di chuyển qua và làm nổi bật dòng được rê qua:

    // ...oops! we forgot one
    jxTable.getHighlighters().addHighlighter(
        new RolloverHighlighter(Color.BLACK, Color.WHITE ));
    jxTable.setRolloverEnabled(true);

When more than one Highlighter is in the HighlighterPipeline, each one is called in turn to apply its highlighting. You could add a ConditionalHighlighter on top of the AlternateHighlighter so that, apart from every other row being colored, certain columns that meet conditional criteria are automatically highlighted as well. Of course, you can also write your own Highlighters.

Bước 4: Sắp xếp và Lọc

Với JTable, programmers had to wrap the table in a TableSorter hoặc cơ chế khác để cung cấp cho việc sắp xếp tự động. JXTable được xây dựng sẵn tính năng sắp bằng cột: người dùng có thể sắp xếp bất cứ cột nào bằng cách click trên nó. Cột sẽ được sắp xếp luân phiên theo thứ tự tăng dần hoặc giảm dần tại mỗi thời điểm dòng được click.

JXTables mặc định bật tính năng sort. Bạn có thể vô hiệu hóa tất cả các cột bằng hàm setSortingEnabled(boolean allowSort). Bạn cũng có thể vô hiệu hóa chỉ một cột duy nhất bằng cách dùng setSorterClass(String sorterClassName) với tên lớp được sort là null.

Mặc định sorter sử dụng trên một cột có thể được ghi đè bằng cách cung cấp một  giá trị so sánh mới cho thuật toán sắp xếp. Một ví dụ tốt cho vấn đề này trong demo SwingXDemo, where a point (x, y) is sorted on the value of x and y as a Point, and not as a String. In the SimpleJXTableDemo, we create a special sorter for our columns with float values, to have the column sort in proper numeric order.

    Comparator numberComparator = new Comparator() {
        public int compare(Object o1, Object o2) {
            Double d1 = Double.valueOf(o1 == null ? "0" : (String)o1);
            Double d2 = Double.valueOf(o2 == null ? "0" : (String)o2);
            return d1.compareTo(d2);
        }
    };
    // First, the long way to assign--just to show there's a Sorter involved
    Sorter sorter = jxTable.getColumnExt("ELEVATION").getSorter();
    sorter.setComparator(numberComparator);

Filtering Rows from Display

Bạn có thể loại bỏ một dòng từ  JXTable mà không cần sửa đổi mô hình bên dưới bằng cách sử dụng Filters. Cũng như  Highlighters, Filters cũng có thể được móc nối lại với nhau như  một pipeline, FilterPipeline, and are added to a table using setFilters(FilterPipeline pipeline).

Trong demo SampleJXTableDemo, chúng tôi sự dụng tính năng lọc để chí hiển thị những quốc gia có tên bắt đầu bằng ký tự A sử dụng một mẫu lọc trên dòng country.

    int col = jxTable.getColumn("COUNTRY").getModelIndex();
    jxTable.setFilters(new FilterPipeline(
        new Filter[] { new PatternFilter("A.*", 0, col) }));

Filters không thực sự loại bỏ dữ liệu từ TableModel; nó chỉ tạm ẩn chúng (hoặc trong trường hợp của Sorter, đó là nguyên nhân mà thứ tự các dòng xuật hiện khác với mô hình dữ liệu bên dưới). Gở bỏ PatternFilter, cho ví dụ này, sẽ làm cho các dòng đã ẩn trước đó được hiển thị lại.

(c) f2u

Follow

Get every new post delivered to your Inbox.