Как стать автором
Обновить

Комментарии 14

Честно говоря, за такие уроки надо руки отрывать имхо.

ProductDAO.INSTANCE_PRODUCT

ORLY? Я понимаю (точнее, надеюсь) что для упрощения примера Вы решили выкинуть IoC, но сделали бы тогда хотя бы подобие ServiceLocator-а.

//каждый ваш Entity здесь нужно прописать, не пропишете — не будет работать.
ac.addAnnotatedClass(ProductEntity.class).addAnnotatedClass(BookEntity.class).addAnnotatedClass(CableEntity.class)
.addAnnotatedClass(CameraEntity.class).addAnnotatedClass(NotebookEntity.class).
addAnnotatedClass(CartEntity.class).addAnnotatedClass(CustomerEntity.class);

<mapping class=«edu.shumenko.entity.*»/> не?

В общем, принимая роль учителя всегда думайте о том, чтобы не навредить подаваемыми знаниями:)
Про IoC я хотел начать говорить, когда дело дойдет до спринга. Там же коснуться конфигурирования с помощью XML.
Там и без IoC проблемы:
public interface ProductDAO {
    ProductDAO INSTANCE_PRODUCT= new ProductDAOImpl();
    List<Product> getProducts();
    //и метод с которым мы будем работать
}

Почему в вашем интерфейсе создается инстанс потомка этого же интерфейса?
Ну у меня был один интерфейс от которого все наследовались

public interface InterfaceDAO {
    
    InterfaceDAO INSTANCE_PRODUCT= new ProductDAO();
    InterfaceDAO INSTANCE_BOOK= new BookDAO();
    InterfaceDAO INSTANCE_NOTEBOOK= new NotebookDAO();
    InterfaceDAO INSTANCE_CABLE= new CableDAO();
    InterfaceDAO INSTANCE_CAMERA= new CameraDAO();
   
    List<IEntity> getProducts();
    
}


и я это потом использовал примерно так.

DAO.INSTANCE_PRODUCT.getProducts();
DAO.INSTANSE_NOTEBOOK.getProducts();


но в дальнейшем хотел описать как применять Factory.
А можете объяснить почему вы так решили сделать? Забегая впред как вы собирались это испольщовать когда дощли бы до IoC? Переписали бы все?
Меня эти инстансы в интерфейсах некоторых эклипсовых библиотек, когда приходится с ними связываться, в тупик просто ставят постоянно. Это какой-то паттерн популярный в эклипсовом комьюнити или что? Больше я нигде вроде не встречал такого.
И все таки молодец! )) Если допишешь цикл, будешь молодцом вдвойне ))
Ужасный index.jsp. Таких страниц быть не должно.
я просто показал как можно посмотреть результаты особо не заморачиваясь. И сделал там заметку, что так делать плохо. Выводится будет примерно так.
<table border="2" width="2" cellspacing="2" cellpadding="2" >
        <thead>
            <tr>
                <th>№</th>
                <th>Имя</th>
                <th>Модель</th>
                <th>Цена</th>
                <th>Наличие</th>
                <th>В корзину</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${notebook}" var="notebook"> 
                <tr>

                    <td><c:out value="${notebook.getId()}"/></td>
                    <td><c:out value="${notebook.getNameNotebook()}"/></td>
                    <td><c:out value="${notebook.getModelNotebook()}"/></td>
                    <td><c:out value="${notebook.getPrice()}"/></td>
                    <td><c:out value="${notebook.viewAmountNotebook()}"/></td>
                    <td>
                        <form action="addToCartServlet" method="post" >
                            <input type="submit" name="" value="В корзину" /> 
                            <input type="hidden" name="infoItem"  value="${notebook.getModelNotebook()}">
                            <input type="hidden" name="nameItem"  value="${notebook.getNameNotebook()}">
                            <input type="hidden" name="priceItem"  value="${notebook.getPrice()}">                        
                            <input type="hidden" name="target"  value="/notebook">
                        </form>
                    </td>                
                </tr>
            </c:forEach>
А зачем тогда вообще рассказывать как делать плохо? Расскажите лучше как нужно и правильно писать jsp.
Пример выше тоже не верный. Getter'ы и «скобочки» в коде JSTL не указываются. Так правильно ${notebook.id}.
Только что с JSTL познакомились?
Да. Как и со всем остальным в принципе тоже.
Понял подправлю.
Статья расчитана на людей, которые в первый раз видят Hibernate. Вы черезчур придираетесь к деталям. Задача этого поста была показать как создавать элементарные сущности и с помощью Hibernate поработать немножко с базой своей. Узнать что такое Criteria, и как делать CRUD операции.

То что я не пишу maping, а сделал добавление в HibernateUtil и использую аннотации — это дело вкуса каждого.

В любом случае, человек сможет взять это как основу, подразобраться, — и улучшить уже так, как считает нужным.

Просто хотелось помочь, чем мог как говориться. А в итоге лишь куча критики в мою сторону.
В ваших примерах содержится ряд плохих практик. Начиная от странных структурных паттернов, заканчивая вызовами persistance-слоя из .jsp. Использование JPA аннотаций, но в то же время привязка к конкретному JPA провайдеру — hibernate. Использование транзакций где следует и где нет — например в данном проекте нет особого смысла оборачивать запрос на получение списка продуктов в транзакцию. Да и именование методов, полей класса и интерфейсов отличаются от стандартных конвенций.

Такова уж java — слишком высок порог вхождения и слишком много прилагаемых технологий нужно освоить, чтобы писать правильный код.
subversion.assembla.com/svn/edu-shumenko-webshop/
сдесь лежит код проекта+еще один пример. Можете просмотреть и предложить какие либо изменения и подсказки. И помочь закончить цикл статей с учетом моих ошибок допущенных в первой.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.