Я уже общался с веб-разработкой .NET, но теперь мне все еще очень неудобно, используя Javaweb.
1. Разговор о архитектуре проекта <br /> Я впервые вступил в контакт с развитием, связанной с .NET, поэтому я очень хорошо знаком с развитием .NET, но я выучил Java в школе и планирую объединить эти две платформы. Вставайте, используйте Java в качестве бэкэнда, то есть поставщика услуг, заполните всю бизнес -логику на платформе Java и используйте .NET, с которой я больше знакомы для веб -разработки. Таким образом, будут приложения для Android и веб-стороны. Клиент равномерно вызывает сервис через распределенную структуру. После долгого поиска я, наконец, выбрал HProse, легкую, кроссплатформенную, неинвазивную, неинвазивную, неинвазивную, высокоэффективную динамическую динамическую библиотеку двигателей. Причина, по которой я выбрал его из-за низкой стоимости обучения, а с другой стороны, его кроссплатформенный вызов очень прост и эффективен, потому что нам нужно использовать .net для выполнения Интернета, чтобы вызвать услуги, опубликованные Java! После примерно рассмотрения документации HProse, я обнаружил, что использование встроенной службы выпуска HProseerservlet более быстрее и проще в разработке, поэтому я планирую использовать этот метод для публикации службы. Но проблема в том, что традиционная архитектура SSH кажется немного тяжелой, и я собираюсь использовать .NET для разработки веб -стороны, поэтому я чувствую, что нет необходимости интегрировать стойки, так что это архитектура Hibernate+Spring+HProse Полем
2. Дизайн базы данных
Это небольшой онлайн -магазин, поэтому дизайн все еще не хватает, и он в основном практичен, в основном практикует Java Development ~~. Поэтому я использовал Navicat, чтобы спроектировать его, но вместо этого я добавил отношения один за другим.
На самом деле, вы можете увидеть корреляцию таблицы с первого взгляда ~~, затем посвящены некоторым отображениям, а также используют плагины для генерации моделей и картирования файлов.
Это так с небольшой модификацией-
3. Spring3+Конфигурация Hibernate4 <Br /> Поскольку модель и отображение файлов сгенерированы, лучше настраивать их. составная модель. Например, составной тип первичного ключа в таблице обзора продукта :
Пакет com.book.model; // сгенерировано 2015-11-2 9:07:06 с помощью Hibernate Tools 4.0.0.finalimport java.util.date;/** * Комментарии, сгенерированные HBM2Java */publi c Classplise Commentspk Imprements Java . .commentsDate = Комментарии пользователь) {this.user = user; == Другое)) вернуть true; Castother.getBook ()) ||. ) == castother.getUser ()) || .getcom mentsdate () == castother.getCommentsDate ()) || (this.getCommentsDate ()! = NULL && castother.getCommentsDate ()! = null && this.getCommentsDate (). ; = null? Модель таблицы обзора продукта :
Пакет com.book.model; // сгенерировано 2015-10-30 14:56:21 с помощью инструментов Hibernate 4.0.0.finalimport java.sql.date;/** * Комментарии, сгенерированные HBM2Java */Общедоступные комментарии к классу. Обнаружение Java. io.serializable {Private String Content; } public String getPic () {return pic; ; Содержание = Соответствующий файл отображения Hibernate:
<? xml version = "1.0"?> <! Doctype Hibernate Mapping Public "-// Hibernate/Hibernate Mapping Dtd 3.0 // en" "http://www.hibernate.org/dtd/hibernate-mapp ing-3.0 . "Комментарии" catalog = "bookstore"> <composite-id name = "id"> <key-many-one name = "book"> <column name = "bookid" /> < /key-many-to- One> <key-many-to-one name = "user"> <column name = "userId" /> < /key-many-to-one> <key-property name = "commismDate" type = "timestamp"> <column name = "commentsDate" length = "19"/> </key-property> </composite-id> <name = "content" type = "string"> <column name = "content" length = "65535 " /> < /property> <name =" pic "type =" string "> <column name =" pic "length =" 65535 " /> < /properation> <name =" client "type =" java. Lan G .integer "> <column name =" client "/> </property> </class> </hibernate mapping>
Поскольку в таблице обзоров продуктов есть два иностранных ключа, используется тег с ключами в один.
Поскольку используется Spring3.2+Hibernate4.1, способ получить SessionFactory ограничен SessionFactory.getCurrentSession (); Но все должно быть включено:
<bean id = "transactionManager"> <name = "sessionFactory" ref = "sessionFactory" /> < /bean> <!-Характеристики распространения транзакций-> <TX: Asse Id = "txAdvice" Transaction-Manager = "TransactionManager"> <tx: атрибуты> <tx: method name = "add*" opragation = "требуется" /> <tx: method name = "delete*" opragation = "требуется" /> <tx: method name = " Modify*"opragation =" требуется " /> <!-Hibernate4 должен быть настроен для включения транзакций, в противном случае GetCurrentSession () не может быть получена-> <tx: method name ="*"Propagation =" Требуется " = "true"/> </tx: атрибуты> </tx: консультант>
Вышеупомянутые проблемы, которые возникли, когда я его настроил. Вот файл конфигурации пружины:
<? xml version = "1.0" Encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org /2001/xmlschema-instance "xmlns: aop =" http://www.springframework.org/schema/aop "xmlns: context =" http://www.springframework.org/schema/ context "xmlns: tx =" http://www.springframework.org/schema/tx "xsi: schemalocation =" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans- 3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http: //www.springframe k.org/schema/ Контекст http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http: //www.springframework -TX-3.2.2.xsd "> <!-Включить поддержку пружинных аннотаций-> <Контекст: аннотация-конфиг /> <bean id =" dataSource "Dressome-method =" close "> <name =" DriverClassnam e " value = "com.mysql.jdbc.driver"/> <name = "url" value = "jdbc: mysql: //127.0.0.1/bookstore? useUnicode = true & farmentencoding = UTF-8"/> <Property Name = " Имя пользователя "value =" root " /> <name =" password "value =" yangyang " /> < /bean> <!-Вы можете добавить конфигурацию вторичного кэша-> <bean id =" sessionFactory " > <Свойство имя = "dataSource" ref = "dataSource"/> <name = "mappingDirectoryLocations"> <Sist> <date> classPath: config </value> </list> </properation> <name = "hibernateProperties "> <props> <prop key =" hibernate.dialect "> org.hibernate.dialect.mysqlidialect </prop> <prop key =" hibernate.show_sql "> true </prop> <prop key =" hibernate.show_sql " > true </prop> <prop key = "hibernat e.hbm2ddl.auto"> update </prop> <prop key = "hibernate.temp.use_jdbc_metadata_defaults"> false </prop> <prop key = "current_session_class"> Thread </prop> </props> </property> </bean> <!-Конфигурация транзакционных транзакций-> <bean id = "transactionManager"> <name = "sessionFactory" ref = "sessionFactory"/> </> </> </> </> </> </> </> </ Bean> <!-Характеристики распространения транзакций-> <tx: usd id = "txadvice" transaction-manager = "transactionManager"> <tx: атрибуты> <tx: method name = "add*" Propagation = "Требуется" /> <tx: method name = "delet e*" opragation = "требуется" /> <tx: method name = "modify*" opragation = "требуется" /> <!-Hibernate4 должен быть настроен для включения транзакций, в противном случае getCurrentSession () не может быть получена-> <tx: method name = "*" opragation = "require" intyly = "true"/> </tx: атрибуты> </tx: консультант> <!-Эти классы и методы используют транзакции-> <aop: config> <!-только транзакции внедрены для бизнес-логического уровня-> <aop: pointcut id = "allmanagermethod" Expression = "expression (* com.book.test.* .*(..)) " /> <aop: Advisor pointcut-ref =" allmanagermethod "adv ica-ref =" txadvice " /> < /aop: config> <bean name =" baseddao " /> <bean name = "orderdao" /> < /beans>
После того, как все будет готово, мы используем тест сервлета:
<servlet> <vervlet-name> test </servlet-name> <bertlet-class> com.book.test.test </servlet-class> </servlet> <servlet-mapping> <servlet-name> test </ Servlet-name> <Url-pattern>/index </url-pattern> </servlet-mapping>
Защищенная void Doget (httpservletrequest, httpservletresponse ответ) OrderDao.
Поскольку мы не используем структуры, нам нужно найти Beanfactory для получения бобов Dao.
Результаты работы:
Успешно загруженная таблица заказа 1 Заказ 1 Количество заказа.
В конце концов, это первый раз, когда я использовал Java для разработки таких проектов.