Bài 5: Hiển thị danh sách sản phẩm theo danh mục

Tiếp theo loạt video hướng dẫn xây dựng web bán hàng sử dụng Spring Framework mình sẽ nói tiếp đến phần làm sao để có thể hiển thị danh sách sản phẩm theo danh mục lên web. Nhưng để có thể làm được bài này thì bắt buộc bạn đã làm được bài hiển thị danh mục sản phẩm lên web mà mình đã hướng dẫn ở bài trước đó.

Phần hiển thị danh sách sản phẩm theo danh mục lên web thật ra không hề khó, nếu như bạn đã làm được hiển thị danh mục sản phẩm lên web thì phần này chỉ nâng cao hơn xí ở chỗ câu truy vấn dữ liệu mà thôi. Câu lệnh sẽ có thay đổi một xí khi bạn muốn lấy được danh sách sản phẩm dựa vào danh mục thì cần phải truyền vào mã danh mục để có thể lấy đúng được dữ liệu.

Đầu tiên, bạn hãy viết phương thức lấy danh sách sản phẩm dựa theo mã danh mục, câu lệnh như sau:

Nhớ khai báo trong file cấu hình lớp ProductDAO bạn vừa tạo:

Và cuối cùng, việc còn lại là bạn sẽ hiển thị danh sách sản phẩm ở trang JSP sau khi người dùng nhấn vào đường link danh mục ở bài trước. Ở phần hiển thị danh mục sản phẩm bạn cấu hình đường dẫn trang thẻ <a> để khi nhấn link chúng ta truyền lên Controller xử lý, điều bạn cần là truyền mã danh mục.

Còn Controller thì cần xử lý khi người dùng nhấn vào đường dẫn danh mục:

Download source code tại đây.

Download source code link 1:

Hiển thị danh sách sản phẩm theo danh mục

Download source code link 2:

Hiển thị danh sách sản phẩm theo danh mục

(Tác giả: Tùng Dương)

10 thoughts on “Bài 5: Hiển thị danh sách sản phẩm theo danh mục

  1. khi thêm lệnh:query.setMaxResults(6) thì bị lỗi mong ad xem hộ;
    Sep 02, 2017 8:36:58 PM org.hibernate.Version logVersion
    INFO: HHH000412: Hibernate Core {5.2.2.Final}
    Sep 02, 2017 8:36:58 PM org.hibernate.cfg.Environment
    INFO: HHH000206: hibernate.properties not found
    Sep 02, 2017 8:36:58 PM org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: HHH000021: Bytecode provider name : javassist
    Sep 02, 2017 8:36:58 PM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
    WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-configuration. Use namespace http://www.hibernate.org/dtd/hibernate-configuration instead. Support for obsolete DTD/XSD namespaces may be removed at any time.
    Sep 02, 2017 8:36:59 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager
    INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
    Sep 02, 2017 8:36:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
    WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
    Sep 02, 2017 8:36:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH10001005: using driver [net.sourceforge.jtds.jdbc.Driver] at URL [jdbc:jtds:sqlserver://localhost:1433;databaseName=shopweb]
    Sep 02, 2017 8:36:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH10001001: Connection properties: {}
    Sep 02, 2017 8:36:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH10001003: Autocommit mode: false
    Sep 02, 2017 8:36:59 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections
    INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
    Sep 02, 2017 8:36:59 PM org.hibernate.dialect.Dialect
    INFO: HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect
    Sep 02, 2017 8:36:59 PM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl useContextualLobCreation
    INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
    Sep 02, 2017 8:37:01 PM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
    INFO: HHH000397: Using ASTQueryTranslatorFactory
    Hibernate: select TOP ? product0_.productID as productI1_1_, product0_.categoryID as category6_1_, product0_.productDescription as productD2_1_, product0_.productImage as productI3_1_, product0_.productName as productN4_1_, product0_.productPrice as productP5_1_ from dbo.product product0_ order by rand()
    Sep 02, 2017 8:37:01 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    WARN: SQL Error: 102, SQLState: 42000
    Sep 02, 2017 8:37:01 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: Incorrect syntax near ‘@P0’.
    Exception in thread “main” javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1407)
    at dao.ProductDao.getAllProductByRandom(ProductDao.java:36)
    at dao.ProductDao.main(ProductDao.java:46)
    Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2123)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1911)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1887)
    at org.hibernate.loader.Loader.doQuery(Loader.java:932)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349)
    at org.hibernate.loader.Loader.doList(Loader.java:2615)
    at org.hibernate.loader.Loader.doList(Loader.java:2598)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2430)
    at org.hibernate.loader.Loader.list(Loader.java:2425)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1458)
    at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1426)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1398)
    … 2 more
    Caused by: java.sql.SQLException: Incorrect syntax near ‘@P0’.
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2421)
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:671)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:505)
    at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:1029)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)
    … 17 more

      1. public ArrayList getAllProductByRandom(){
        Session session=(Session) HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction transaction=session.beginTransaction();
        @SuppressWarnings(“rawtypes”)
        Query query=session.createQuery(“from product order by Rand()”);
        query.setMaxResults(6);
        @SuppressWarnings({ “unchecked”, “deprecation” })
        ArrayList list=(ArrayList) query.list();
        transaction.commit();
        return list;

        }

        1. Bạn thử Query query=session.createQuery(“from product”);
          coi được không, nếu không dc thì bạn gửi thêm model product mình xem.

          1. trần văn cừ

            - Edit

            nếu query như vậy thì được ạ

            package model;
            import javax.persistence.*;
            @Entity(name = “product”)
            public class Product {

            @Id
            private long productID;
            @ManyToOne
            @JoinColumn(name = “categoryID”)
            private Category category;
            private String productName;
            private String productImage;
            private double productPrice;
            private String productDescription;

            public Product() {
            }

            public Product(long productID, Category categoryID, String productName,
            String productImage, double productPrice, String productDescription) {
            this.productID = productID;
            this.category = categoryID;
            this.productName = productName;
            this.productImage = productImage;
            this.productPrice = productPrice;
            this.productDescription = productDescription;
            }

            public long getProductID() {
            return productID;
            }

            public void setProductID(long productID) {
            this.productID = productID;
            }

            public Category getCategory() {
            return category;
            }

            public void setCategory(Category categoryID) {
            this.category = categoryID;
            }

            public String getProductName() {
            return productName;
            }

            public void setProductName(String productName) {
            this.productName = productName;
            }

            public String getProductImage() {
            return productImage;
            }

            public void setProductImage(String productImage) {
            this.productImage = productImage;
            }

            public double getProductPrice() {
            return productPrice;
            }

            public void setProductPrice(double productPrice) {
            this.productPrice = productPrice;
            }

            public String getProductDescription() {
            return productDescription;
            }

            public void setProductDescription(String productDescription) {
            this.productDescription = productDescription;
            }

            }

          2. Chào bạn hiện tại code của bạn mình chạy được bình thường, vẫn load được sản phẩm.

            public ArrayList getAllProductByRandom(){
            Session session=(Session) HibernateUtil.getSessionFactory().getCurrentSession();
            Transaction transaction=session.beginTransaction();
            @SuppressWarnings(“rawtypes”)
            Query query=session.createQuery(“from product order by Rand()”);
            query.setMaxResults(6);
            @SuppressWarnings({ “unchecked”, “deprecation” })
            ArrayList list=(ArrayList) query.list();
            transaction.commit();
            return list;
            }
            minh không biết sao nếu dc bạn gửi project vào blogkenhlaptrinh@gmail.com mình chạy thử xem như thế nào.

Bình luận

Loading...