Hibernate

HIBERNATE

Thứ Hai, 23 tháng 8, 2010

Tao Gio Hang Voi MVC

Demo Shopping Cart with MVC (JSP)
MONDAY, 1. MARCH 2010, 16:51:24

JSP

Đây là bài Assignment môn Web Programming with Servlets and JSP môn đầu tiên SEM IV của giáo trình ICCP 2007 Aptech của mình. Nó demo về một hệ thống shopping cart online (Đặt hàng trực tuyến) với mô hình MVC của Java.

Assignment viết thuần JSP witch MVC không hề sử dụng Framework, do vậy đây mang tính chất demo cho các bạn đang học JSP và tìm hiểu về mô hình MVC cũng như hệ thống Shopping cart online đơn giản.

Còn đây là mã nguồn:
http://www.mediafire.com/?yo1mbon1ndb

Chú ý: Restore lại database trong thư mục StoreProcedure/NamVTProject.bak, vào file DAO.java trong packet dal/DAO.java sửa lại thông số SQL.

Các phần mềm sử dụng:
- IDE: Netbeans 6.8.
- JDK 6 update 18.
- DBMS: Microsoft SQL Server 2005.

Công nghệ sử dụng:
- J2EE 5, MS SQL 2005
- HTML, CSS, JQuerry

Tác giả: Vũ Thành Nam

Sau đây là các bảng của CSDL.


- Bảng Admin chứa thông tin của người quản trị.
- Bảng Customer chứa thông tin của khách hàng.
- Bảng Product chứ thông tin sản phẩm.
- Bảng Order và Order Details chứa thông tin về đơn hàng. Hai bảng này có quan hệ một - nhiều.
+ Bảng Order chứa các thông tin chung của một đơn hàng như ID của khách hàng, tổng số tiền.
+ Bảng Order details để lưu thông 1 sản phẩm của đơn hàng như ID sản phẩm, tổng giá và số lượng. Một bảng Order có thể có nhiều bảng Order (cũng như 1 đơn hàng có nhiều sản phẩm).


Tiếp theo đây mình xin trình bầy cơ bản hệ thống Shopping Cart.
Đầu tiên ta xây dựng một lớp ProductItem nó chứa các thông tin của một sản phẩm.


Sau đó ta tiến hành xây dựng lớp Shopping Cart chứa dữ liệu của giỏ hàng cũng như những thao tác như update, xóa hay tạo mới một giỏ hàng.

Nó gồm 1 List các ProductItems
ArrayList items;

Và gồm các hàm để thao tác như
Tạo mới:
public void addItems(ProductItem products){
int status = 0;
for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
if(products.getProdID() == temp.getProdID()){
items.get(i).setQuantity(items.get(i).getQuantity() + 1);
status = 1;
return;
}
}
if(status == 0){
products.setQuantity(1);
}
items.add(products);
}

Chú ý:
if(products.getProdID() == temp.getProdID())
để kiểm tra xem sản phẩm đó đã được add vào giỏ hàng hay chưa nếu rồi thì cộng tổng số sản phẩm có trong giỏ hàng lên 1, nếu chưa thì set số sản phẩm là 1.

- Xóa 1 sản phẩm khỏi giỏ hàng:
// remove a product in list
public void removeItems(int ID){
for(int i = 0; i <= items.size(); i++){
ProductItem temp = items.get(i);
if(temp.getProdID() == ID){
items.remove(i);
return;
}
}
}

- Và các hàm như update số lượng sản phẩm, lấy tổng số tiền hay lấy tổng số sản phẩm có trong giỏ hàng, và làm rỗng giỏ hàng.
// update quantity for product
public void updateItems(int ID, int newQuantity) {
for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
if(temp.getProdID() == ID){
items.get(i).setQuantity(newQuantity);
}
}
}

// get total Price in list product
public double totalPrice(){
double price = 0;

for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
price += temp.getPrice();
}
return price;
}

// get total Quantity in list product
public double totalQuantiy(){
double total = 0;

for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
total = total + temp.getQuantity();
}
return total;
}

// remove all list
public void Clear(){
items.clear();
}

OK vậy là ta đã có hai đối tượng để thao tác với giỏ hàng. Vấn đề ở đây là add vào giỏ hàng như thế nào thôi.
Đây là Servlet để xử lý phần add vào giỏ hàng.
Đầu tiên ta phải lấy các request trả về từ Views như ID sản phẩm, tên sản phẩm hay giá sản phẩm ....
int quantity = 1;
int prodID = Integer.parseInt(request.getParameter("ProductID"));
String prodName = request.getParameter("ProductName");
double price = Double.parseDouble(request.getParameter("Price"));

Tiếp theo là khởi tạo một đối tượng ProductItem gồm có những thông số như trên
ProductItem products = new ProductItem(prodID, prodName, price, quantity);

OK vậy là ta đã có thông tin của đối tượng việc còn lại là khởi tạo một biến session để lưu thông tin của sản phẩm.
if(session.getAttribute("Cart") == null){ // Kiểm tra xem đã tồn tại session chưa
ShoppingCart cart = new ShoppingCart();
cart.addItems(products); //Thực hiện add product vào đối tượng Shopping Cart
session.setAttribute("Cart", cart);//Tạo session mới có tên là Cart và chứa thông tin của sản phẩm.
}
else{ // Nếu session đã tồn tại thì ta lấy dữ liệu của session vào cho đối tương Shopping Cart
ShoppingCart cart = (ShoppingCart)session.getAttribute("Cart");
cart.addItems(products); //Và tiếp tục add một sản phẩm mới vào.
}

Vậy là ta đã add được một sản phẩm vào giỏ hàng, các phần còn lại như update, xóa 1 sản phẩm, hay làm rỗng giỏ hàng ta tiến hành tương tự.

Việc tiếp theo của ta là insert vào database thông tin của giỏ hàng.
Ta thực hiện như sau:
Đầu tiên ta phải thực hiện insert vào bảng Order (chứa thông tin tổng quát của đơn hàng của khách).
Order EO = new Order();
EO.setCustomerID(CustomerID);
EO.setTotalMoney(totalPrice);
EO.setState(0);
EO.setNote("hello");

OrderBO OOder = new OrderBO();
OOder.addOrder(EO);

Giờ việc cuối cùng là insert các thông tin chi tiết của đơn hàng (gồm thông tin khách hàng, các sản phẩm khách đặt mua)
Việc đầu tiên là ta phải lấy ID của bảng Order vừa insert bằng cách mấy ID lớn nhất của Order (vì ID đc insert tự động theo chế độ identity (tự tăng 1 đơn vị và đơn vị đầu tiên bằng 1).
int MaxID = OOder.MaxIDOrder();

Sau đó ta phải lấy toàn bộ chi tiết đơn hàng thông qua biến session Cart.
ShoppingCart Cart = (ShoppingCart)session.getAttribute("Cart");
List cProduct = Cart.getAllItem();

Việc còn lại là insert vào bảng Order Details
NamVTProject.ProductItem p;
OrderDetails EOD = new OrderDetails();
OrderDetailsBO BOD = new OrderDetailsBO();

//Lặp toàn bộ danh sách của giỏ hàng sau đó lần lượt insert và các bảng Order Details.
for (int i = 0; i < cProduct.size();i++) {
p = cProduct.get(i);
EOD.setOrdersID(MaxID);
int pri = (int) p.getPrice();
EOD.setPrice(pri);
EOD.setProductID(p.getProdID());
EOD.setQuantity(p.getQuantity());
BOD.addOrder(EOD);
}


Trên đây là mình trình bầy một cách tổng quát nhất về hệ thống Shopping Cart, các bạn có thể down mã nguồn về để xem có gì thắc mắc cứ post bài thoải mái tại đây.

Best regards !

Một vài Screenshot

Thứ Tư, 14 tháng 7, 2010

Hibernate Many-to-one Relationships

Nhieu-to-Một quan hệ mới

A-to-mot Trọng nhieu moi quan hệ La Noi nhung ma mot Trọng thức đồng Gia Trí thức Tham Khao mot Thể (mot cột hay tập hợp CÁC cột) có Giá Giá trị Duy Nhất. Trọng cơ Sở quan hệ du Liêu, chuột nhieu CAC-to-mot Trọng nhung moi quan hệ nay Thường thức được thi bội khoa ngoai / Trọng Tiểu học mới quan hệ, So sánh CÁC mới quan hệ được Giua Thường thức Tế Bảng So sánh Kích thước So sánh giua CÁC Cấp hệ thống Cấp Trọng bac mot.

Trọng vi du nay câu chuyện nhieu (Lịch sử Java, Java Platform, Java Tin tức So sánh Jee News) được Liên kết voi Java Nhóm 2 (không có Chính Chính la 1)

O đẩy chung ta se thức thi nhieu-to-mot Trọng nhung moi quan hệ giua hai mục Group So sánhStory.

Bàn Cờ Kiếm không Group.java tra, Story.java Group.hbm.xml So sánh tập tin Trọng chung toi -to-nhieu vi du mot phần.

Thực Thể câu chuyện:

Trọng Story.java Thục Chung ta Phai xác Định Nhóm Đối tượng So sánh So sánh getter setters cho cung:

Nhân tư Group Nhóm;

công getGroup Group () (

Lại trợ Nhóm;

)

công void setGroup (Nhóm Nhóm) (

nay.Nhóm = Nhóm;

)

Giải Thích ve Hibernate Lập bản đồ:

Viec Lập bản đồ nhiều việc đẩy được sử dụng đế xác Định CÁC mới quan hệ nhieu-mot:

<nhieu-to-mot nhung Trọng Tên="Nhóm" class="roseindia.Group" cột="parent_id" />

Đế chay vi du Bàn Cờ Thể thức hien ManyToOneRelation.java. Duoi đẩy la keygen cua ManyToOneRelation.java lớp:

/ **
*
* /
GÓI roseindia;

Khâu nhập org.hibernate.HibernateException;
Khâu nhập org.hibernate.Session;
Khâu nhập org.hibernate.SessionFactory;
Khâu nhập org.hibernate.cfg.Configuration;

public class ManyToOneRelation (

public static void Chính(String[] args) (

SessionFactory sessFact = null;
Session sess = null;
thử (
sessFact =Mới Configuration(). cau hình()buildSessionFactory.();
sess = sessFact.openSession();
Câu chuyện câu chuyện = (Story)sess.load(Story.class, 3);
Nhóm Nhóm = story.getGroup();

System.out.println("Group Name:"+ group.getName());

)
catch (HibernateException Ong) (
System.out.println(he.getMessage());
)
cuoi cung(
/ / SessionFactory gan
sessFact.close();
/ / Phiên gan
sess.close();
)

)

)

Trọng đoán code o tren chung toi đá Tải CÁC Chính thức đồng Story Chính la 3, So sánh độ Lấy ra nhiều việc tập Đoàn tôi. Chung toi cung cua đá trong câu chuyện mười. Neu ban vi du CÁC chay Trọng Eclipse se Nhận được lệnh cấm ĐẦU ra nhiều việc đẩy:

og4j: Không có cảnh báo appenders CO được thay tim cho logger (org.hibernate.cfg.Environment).

log4j: cảnh báo Xin vui lòng khoi tao hệ thống log4j đựng.

Hibernate: Chon id3_0_ story0_.id Khí, story0_.info Khí info3_0_, story0_.parent_id Khí parent3_3_0_ Từ câu chuyện nội story0_ story0_.id =?

Hibernate: Chon group0_.id Như id2_0_, group0_.name Như name2_0_ Từ group0_ gropuptable nội group0_.id =?


Link dowlaod tai day