SSH Framework Integration
ПРЕДИСЛОВИЕ: Некоторые люди говорят, что основная структура теперь все еще популярна, и SSM отсутствовал в течение долгого времени, не говоря уже о SSH. Я так не думаю. В настоящее время многие компании по -прежнему используют SSH, и, если они изменятся на основные рамки, это будет стоить. Например, в финансовом поле ИТ рекомендуется использовать Hibernate на уровне базы данных, поскольку его можно разрабатывать быстро, если это не интернет. Поскольку он включает в себя высокую параллелизацию, уровень базы данных использует Mybatis, которая обладает более высокой эффективностью взаимодействия с данными. Следовательно, SSH нельзя игнорировать.
1. Что такое SSH
SSH - это интегрированная структура стойки+Spring+Hibernate и в настоящее время является популярной структурой с открытым исходным кодом для веб -приложений.
Система, интегрирующая структуру SSH, разделена на четыре уровня с точки зрения обязанностей: уровень презентации, слой бизнес -логики, уровень стойкости данных и уровень модуля домена, чтобы помочь разработчикам создавать веб -приложения с четкой структурой, хорошей способностью повторного использования и удобным обслуживанием в краткосрочной перспективе. Среди них стойки используются в качестве общей инфраструктуры системы, ответственной за разделение MVC и в модельной части структуры стойки, контролируя прыжки с бизнесом, используя структуру с зимством для обеспечения поддержки упорного уровня, Spring Man Manages, управляет Struts и Hibernate. Конкретный подход: используйте объектно-ориентированные методы анализа для предложения некоторых моделей в соответствии с потребностями, реализовать эти модели в качестве основных объектов Java, а затем написать основной интерфейс DAO (объекты доступа данных) и дать реализацию DAO Hibernate. Класс DAO, реализованный архитектурой Hibernate, используется для реализации конверсии и доступа между классами Java и базами данных. Наконец, весна управляет и управляет распорками и спячкой.
---------- Baidu Encyclopedia
2. Части, участвующие в SSH
3. Быстрое развертывание окружающей среды
Здесь мы используем небольшую демонстрацию, чтобы спасти клиентов, чтобы продемонстрировать интеграцию SSH
1. Импорт требуемый пакет JAR
1). Struts2 Framework
* struts-2.3.24/apps/struts2-blank/web-inf/lib/*.
* struts2-spring-plugin-2.3.24.jar --- Struts2 интегрирует плагин-пакет Spring
2). Священная структура
* hibernate-release-5.0.7.final/lib/required/*.jar-пакет JAR, требуемый для Hibernate Framework
* SLF4J-API-1.6.1.JAR-Интерфейс журнала
* slf4j-log4j12-1.7.2.jar-реализация журнала
* MySQL-Connector-Java-5.1.7-bin.jar-пакет драйверов MySQL
3). Весенняя каркас
* Основной пакет IOC
* AOP Core Package
* Шаблоны JDBC и основные пакеты транзакций
* Spring интегрирует тестовый пакет JUNIT
* Spring интегрирует пакет Hibernate Core
* Spring интегрирует основной пакет Struts2
2. Настройте код, связанный с пружиной и стойкой в web.xml
1) Настройка ядра struts2
Это определяется как перехват всех
<!-Настройка Filter Filter-> <filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutspreareandexecutefilter </filter-class> </filter> <filter-mapping> <filter-name> struts2 </filter> </filter> <filter> <filter-name> struts2 </filter> </filter> <filter-mapping> <filter> struts2 </filter> </filter> <filter> <Url-pattern>/*</url-pattern> </filter-mapping>
2) Настройка пружинного слушателя
При запуске службы файл конфигурации пружины будет загружен сначала
<!-Настройте слушатель для Spring Framework, интегрирующей веб-сайт-> <Learser> <Learser-class> org.springframework.web.context.contextloaderListener </sluster-class> </sluster>
3) Настройка пути загрузки по умолчанию
<!-Слушатель по умолчанию загружает файл Web-Inf. Вам необходимо настроить параметры для загрузки указанного файла-> <Stext-param> <Map-name> contextConfiglocation </param-name> <param-value> classPath: ApplicationContext.xml </param-value> </context-param>
Резюме: все коды для web.xml
<!-- Configure the listener that integrates WEB in the Spring framework --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- The listener loads the Web-INF file by default, and requires configuration parameters to load the specified file --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classPath: ApplicationContext.xml </param-value> </context-param> <!-Настройка основных фильтров-> <Filter> <Filter-Name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutspreandexececutefilter. <Filter-Mapping> <Filter-name> struts2 </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2. Напишите соответствующие файлы конфигурации в SRC
1) Spring: ApplicationContext.xml
Импортные ограничения
<? 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: context = "http://www.springframework.org/schema/context" xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframe.orshema. xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.spramework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> </beans>
2) Hibernate: hibernate.cfg.xml
Импортируйте соответствующие ограничения и настраивайте базу данных
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype hibernate-configuration public "-// конфигурация Hibernate/Hibernate DTD 3.0 // en" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtdddtddtd" hibernate-configuration-3.0.dtddtddtd "hibernate-configuration-3.0.dtdddtd"> hibernate> <hibernate-configuration-3.0. <session-factory> <!-Должен настройка-> <name = "hibernate.connection.driver_class"> com.mysql.jdbc.driver </property> <name = "hibernate.connection.url"> jdbc: mysql: //192.168.174.130: 3306/ssh </t. name = "hibernate.connection.username"> root </property> <property name = "hibernate.connection.password"> root </property> <property name = "hibernate.dialect"> org.hibernate.dialect.mysqdialect </properate> <!-Необязательная конфигурация-> <свойство = "hibernate. show_spertive> <! name = "hibernate.format_sql"> true </property> <name = "hibernate.hbm2ddl.auto"> Update </property> <!-Настройка пула соединений для c3p0-> <property name = "connection.provider_class"> org.hibernate.connection.c3p0connectionprovider </class "-не может быть. <!-Файл конфигурации сопоставления-> <mapping resource = "com/clj/domain/customer.hbm.xml"/> </session-factory> </hibernate-configuration>
3) Настройте log4j.properties
### прямые сообщения журнала в Stdout ### log4j.appender.stdout = org.apache.log4j.consoleappenderlog4j.appender.stdout.target = System.errlog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender %c {1}: %l - %m %n ### Прямые сообщения для подачи mylog.log ### log4j.appender.file = org.apache.log4j.fileAppenderlog4j.appender.file.file = c/: mylog.loglog4j.appender.file.layout = org.apache.log4j.patternlayoutlog4j.appender.file.layout.conversion %c {1}: %l - %m %n ### Установить уровни журнала - для получения более многослойного изменения журнала «Информация» на «отладку» ### log4j.rootlogger = info, stdout4) Struts2: struts.xml
Импортные ограничения
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype struts public "-// Apache Software Foundation // DTD Struts Configuration 2.1 // en" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
Резюме: Файл конфигурации, требуемый SRC, показан на рисунке
3. Настройка слоя DAO
Определите интерфейс и его класс реализации
public interface customerdao {public void save (клиент клиент);} Public Class CustomerDaoImpl реализует CustomerDao {public void Said (клиент клиент) {}}4. Определите интерфейс бизнес -уровня и класс реализации
пакет com.clj.service; import com.clj.domain.customer; public interface Customerservice {public void save (клиент клиент);}Пакет com.clj.service; import org.springframework.transaction.annotation.transactional; import com.clj.dao.customerdao; импорт com.clj.domain.customer;/** * Business Layer * @author * * */Public ClassIceMpl Custom }}
5. Определите класс Pojo
Hibernate управляет таблицами баз данных, используя классы POJO для достижения картирования объектно-реламентального
пакет com.clj.domain; Public Class Customer {private long cust_id; частная строка cust_name; private long cust_user_id; private long cust_create_id; частная строка cust_source; частная строка cust_industry; Приватная строка cust_level; частная строка cust_linkman; частная строка cust_phone; Приватная строка cust_mobile; public long getCust_id () {return cust_id; } public void setCust_id (long cust_id) {this.cust_id = cust_id; } public String getCust_name () {return cust_name; } public void setCust_name (String cust_name) {this.cust_name = cust_name; } public long getCust_user_id () {return cust_user_id; } public void setCust_user_id (long cust_user_id) {this.cust_user_id = cust_user_id; } public long getCust_create_id () {return cust_create_id; } public void setCust_create_id (long cust_create_id) {this.cust_create_id = cust_create_id; } public String getCust_source () {return cust_source; } public void setCust_source (String cust_source) {this.cust_source = cust_source; } public String getCust_industry () {return cust_industry; } public void setCust_industry (String cust_industry) {this.cust_industry = cust_industry; } public String getCust_level () {return cust_level; } public void setCust_level (string cust_level) {this.cust_level = cust_level; } public String getCust_linkman () {return cust_linkman; } public void setCust_linkman (String cust_linkman) {this.cust_linkman = cust_linkman; } public String getCust_phone () {return cust_phone; } public void setCust_phone (String cust_phone) {this.cust_phone = cust_phone; } public String getCust_mobile () {return cust_mobile; } public void setCust_mobile (string cust_mobile) {this.cust_mobile = cust_mobile; } @Override public String toString () {return "customer [cust_id =" + cust_id + ", cust_name =" + cust_name + ", cust_user_id =" + cust_user_id + ", cust_create_id =" + cust_create_id + ", cust_source =" + cust_source + ", cust_create_id +", cust_source = " + cust_source +", cust_indus. cust_level = " + cust_level +", cust_linkman = " + cust_linkman +", cust_phone = " + cust_phone +", cust_mobile = " + cust_mobile +"] "; }}6. Определите клиент.hbm.xml
Этот файл конфигурации связан с классом POJO клиента. Этот файл должен быть размещен в том же пакете, что и класс POJO клиента
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Hibernate Mapping Public "-// Hibernate/Hibernate Mapping dtd 3.0 // en" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <hibernate-mapping> <hibernate-mapping> <hibernate-mapping> <hibernate-mapping> <hibernate-mapping> <hibernate-mapping> <hibernate-кар name = "com.clj.domain.customer" table = "cst_customer"> <id name = "cust_id" column = "cust_id"> <generator/> </id> <name = "cust_name" colun = "cust_name"/> <property name = "cust_user_id" culd_uuser_id "/> <propertain =" cust_id_id "cust_uuser_id"/> <name = "cust_id_id" cust_id_id "/> <name =" cust_id_id "cust_id_id". column = "cust_create_id"/> <name = "cust_source" column = "cust_source"/> <name = "cust_industry" column = "cust_industry"/> <name = "cust_level" column = "cust_level"/> <property name = "cust_linkman" culd_linkman "/> <propertive"/> <propertive = "/> <propertive"/> "/>" cust_linkman "/> <propertail_link ="/> "cust_linkman"/> "cust_linkman"/> "cust_linkman". name = "cust_phone" column = "cust_phone"/> <property name = "cust_mobile" column = "cust_mobile"/> </class> </hibernate mapping>
Строительная схема проекта
4. Предварительная демонстрация демонстрации для сохранения клиентов
Здесь мы сначала определяем слой постоянства для Heibernate, бизнес -слоя на struts2 и экземпляр создания на пружину
1. Определите интерфейс для сохранения клиентов и использования форм форм для отправки данных
Согласно доменному имени, мы видим, что метод struts2 подстановочного знака используется для доступа.
<Form id = form1 name = form1 action = "$ {pagecontext.request.contextpath} /customer_add.action" method = post> <!-таблица опускается-> </form>2. Настройте запросы принять в struts.xml, перейдите к указанному действию в соответствии с именем и методом действия и выполните указанный метод
Spring интегрирует метод Struts2 One: Действие управляется Struts2 Framework
* Поскольку пакет импортированных struts2-spring-plugin-2.3.24.jar поставляется с конфигурационным файлом struts-plugin.xml, в файл конфигурации включен следующий код.
* <constant name = "structs.objectfactory" value = "spring" /> включить константу. Если константа включена, можно использовать следующую константу
* struts.objectfactory.spring.autowire = имя, эта константа - класс, который позволяет действию автоматически собирать объекты бобов!
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts Public "-// Apache Software Foundation // Конфигурация Struts DTD 2.1 // en" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-Конфигурация Packege-> "name" name "name" name "name". extends = "struts-default" kinespace = "/"> <!-Настройка действия клиента-> <!-Метод 1: Aciton управляется Struts2 Framework-> <name = "customer_*" method = "{1}"/> </package> </struts>3. Настройте соответствующие бобы и транзакции в Spring ApplicationContext.xml
Здесь, используя функцию IOC (управление инверсией) Весной, задача создания экземпляра передается управлению структурой Spring Framework
<bean id="customerService"> <property name="customerDao" ref="customerDao"></property> </bean> <bean id="customerDao"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="hibernateTemplate"> <!-- Inject sessionFactory --> <property name="sessionFactory"/> </bean> </beans>
4. Напишите код, связанный с классом, связанным с классом, составленным уровнем.
Здесь класс шаблонов, предоставленный Hibernate, используется для внутреннего приложения сеанса, чтобы можно было вызвать метод в сеансе.
/** * Спортивно -уровни * * * @author Administrator * */Public Class CustomerDaoImpl реализует CustomerDao {// Сохранить данные в базу данных (класс шаблона вызовов (предоставленный Hibernate, инкапсулированный сеанс внутри))) Private HibernateTemplate HibernateTemptemptemptemptemtemtemptementeTemptement; public void sethibernateTemplate (hibernatemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate; } / *** Сохранить клиента* / public void said (клиент клиент) {System.out.println ("Постоянный уровень: сохранить клиент"); hibernateTemplate (). Сохранить (клиент); }}5. Написать код, связанный с классом, связанный с классом бизнес -уровня.
package com.clj.service;import org.springframework.transaction.annotation.Transactional;import com.clj.dao.CustomerDao;import com.clj.domain.Customer;/** * Customer's business layer* @author Administrator * */@Transactionalpublic class CustomerServiceImpl implements CustomerService{ private CustomerDao customerDao; public void setcustomerdao (customerdao customerdao) {this.customerdao = customerdao; } // Используется для сохранения клиента Public void Said (клиент клиент) {System.out.println ("Бизнес -уровень, сохранить клиента"); Customerdao.save (клиент); }}6. Написать код, связанный с действием
Вот класс шаблонов Struts2
Пакет com.clj.web.action; import org.apache.struts2.servletactionContext; import org.springframework.web.context.webapplicationContext; импорт org.springframework.web.context.support.webapplicationcontextutils; importclj.domain.custtomer; com.clj.service.customerservice; import com.opensymphony.xwork2.actionsupport; импорт com.opensymphony.xwork2.modeldriven;/** * контрольный уровень клиента * @author Administrator * *//public CustomerAction расширяет acepploms Sultydriven <Customer> {//не забывает, чтобы увенчаться навсегда частным клиентом = New Customer Customer = New Customer (); Общественный клиент getModel () {вернуть клиент; } // Предоставьте атрибуты участника обслуживания и предоставьте SET MEDECTION Private Customers Customerservice; public void setCustomerservice (CustomerService Customer Senser) {this.customerservice = Customerservice; } / *** Сохранить клиента* @return* / public String add () {System.out.println ("Веб -уровень, сохранить клиента"); // Метод 1: Создание веб -фабрики (действие создается Struts2) WebApplicationContext Context = webApplicationContextUtils.getWebApplicationContext (servletactionContext.getServletContext ()); Customerservice CS = (Customerers) context.getBean ("Customer Sense"); // вызов метода Cs.save (клиент); вернуть нет; }}5. Интеграция оптимизации проекта
1. Спорный интеграция Стори. 2 Метод 2: Действие управляется Spring Framework
Поместите конкретный файл конфигурации класса Application.
<Struts> <!-Настройте структуру пакета-> <name = "crm" extends = "struts-default" пространство = "/"> <!-Настройте действие клиента-> <!-Метод 1: Aciton управляется Struts2 Framework <Action name = "Customer_" Метод = "{1} ---> <! Бин требуется в теге класса-> <name = "customer_*" method = "{1}"> </action> </package> </struts>2. Настройте класс действий в ApplicationContext.xml
Примечание. 1) Структура Spring по умолчанию генерирует CustomerAction, а структура StrutS2 множественная. Таким образом, вам нужно настроить Scope = "Прототип"
2) В настоящее время нет автоматической сборки Struts2. В действии вам необходимо вручную настроить свойство Customerervice и генерировать метод SET в классе действий.
<!-Настройте модуль клиента-> <!-Подчеркните: настроенный ацитон должен быть многоколонном-> <Bean Id = "customerAction" Scope = "Prototype"> <!-Примечание: когда строки управляют действиями, основанными на пакете банки-наплух-плугин, который меняет постоянные struts.objectfortory.spring.autowire = имя на это, и это может быть. Вам нужно только предоставить заданный метод. Тем не менее, действие управляется пружиной, а автоматическая сборка недействительна, поэтому вам необходимо вручную выполнить инъекцию конфигурации-> <name = "custryervice" ref = "customerservice"> </property> </bean>
3. Настройка транзакций
Spring интегрирует метод Hibernate Method One: (файл конфигурации с hibernate.cfg.xml. Подчеркните: конфигурация, которая связывает текущий поток, не может быть добавлена)
В прошлом, играя в Hibernate, hibernate.cfg.xml управлял платформой Hibernate. Его файл конфигурации может генерировать SessionFactory. Уровень постоянства загружает этот файл конфигурации, чтобы получить SessionFactory, тем самым создавая сгенерированный заводской сеанс, добавляя, удаляя и изменяя данные в. В настоящее время его файл конфигурации должен быть передан управлению пружиной, полностью используя характеристики IOC Spring.
Spring Framework обеспечивает класс инструментов HibernatedAosupport, который может быть унаследован в будущем DAO! ! Перед введением файла конфигурации сгибального ядра слой DAO должен наследовать родительский класс HibernatedAosupport, который инкапсулирует шаблон транзакции внутри.
Смотрите исходный код:
1) Изменить соответствующий класс реализации уровня постоянства и пусть он наследует HibernatedAosupport
package com.clj.dao;import org.springframework.orm.hibernate5.HibernateTemplate;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.clj.domain.Customer;/** * Persistence layer* Inherits HibernateDaoSupport and encapsulates HibernateTemplate internally * @Author Administrator * * /Public Class CustomerDaoImpl Extens HibernatedAosupport реализует CustomerDao {// Сохранить данные в базу данных (вызовите класс шаблона (предоставленным Hibernate, инкапсулированным сеансом)) / *private hibernateTemptemptementate hibernateTempteTemtemteTemteTemteTemTemTemteTemTemTemteTemteTemteTemTemteTemTemTemteTemTemTementate; public void sethibernateTemplate (hibernatemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate; }*// ***Сохранить клиента*/ public void save (клиент клиент) {System.out.println ("Постоянный уровень: Сохранить клиента"); this.gethibernateTemplate (). Save (Customer); }}2) Изменить бизнес -уровень и включить аннотации транзакций
package com.clj.service;import org.springframework.transaction.annotation.Transactional;import com.clj.dao.CustomerDao;import com.clj.domain.Customer;/** * Customer's business layer* @author Administrator * */@Transactionalpublic class CustomerServiceImpl implements CustomerService{ private CustomerDao customerDao; public void setcustomerdao (customerdao customerdao) {this.customerdao = customerdao; } // Используется для сохранения клиента Public void Said (клиент клиент) {System.out.println ("Бизнес -уровень, сохранить клиента"); Customerdao.save (клиент); }}3) Изменить файл ApplicationContext.xml
Сначала введите файл конфигурации Hibernate
<!-Напишите бобы, имена исправлены, предоставляются Spring, используемые для загрузки файла конфигурации hibernate.cfg.xml-> <bean id = "sessionfactory"> <!-Путь конфигурации: когда запускается сервер, объект будет создан, таким образом, загружая файл hibernate.cfg.xml, тем самым генерируя объект SessionFactory,> <свойство hibernate. value = "classpath: hibernate.cfg.xml"/> </bean>
Настройка управления транзакциями платформы: используется для управления транзакциями. Обратите внимание, что в настоящее время используется структура Hibernate, поэтому необходим менеджер транзакций пластинга Hibernate.
<!-Сначала настроить менеджер транзакций платформы-> <bean id = "transactionManager"> <!-Ввод транзакций, сеанс может управлять транзакциями, а завод может создать сеанс-> <name = "sessionFactory" ref = "sessionFactory"/> </bean>
Открытая аннотация транзакции
<!-аннотация для включения транзакции-> <TX: Annotation-управляемая транзакция-manager = "TransactionManager"/>
Удалить конфигурацию класса шаблона и настроить SessionFactory для упорства.
<!-В будущем Дао необходимо наследовать HibernatedAosupport и Inject SessionFactory-> <bean id = "customerdao"> <!-<name = "hibernateTemplate" ref = "HibernateTemplate"/> <! ref = "sessionFactory"/> </bean>
Все коды следующие
<? 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: context = "http://www.springframework.org/schema/context" xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframe.orshema. xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.spramework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> <!-Напишите фасоль, имена исправлены и предоставляются Spring, чтобы загрузить файл конфигурации Hibernate.cfg.xml-> hibernate.cfg. Configuration path: When the server is started, the object will be created, thus loading the hibernate.cfg.xml file, thereby generating the sessionFactory object --> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> </bean> <!-- Configure the platform transaction manager first-> <bean id="transactionManager"> <!-- Inject transactions, the session can manage Транзакции и завод могут создать сеанс-> <name = name = "sessionFactory" ref = "sessionFactory"/> </bean> <!-аннотация для включения транзакций-> <TX: управляемые аннотациями транзакция-менеджер = "TransactionManager"/> <! Scope = "Prototype"> <!-Примечание. Когда Struts управляет действиями на основе пакета JAR со Struts-Plugin, постоянными стойками. Вам нужно только предоставить заданный метод. Тем не менее, действие управляется весной, а автоматическая сборка недействительна, поэтому вам необходимо вручную выполнить инъекцию конфигурации-> <name = "custryervice" ref = "custryervice"> </property> </bean> <bean id = "custryervice"> <property = "customerdao" ref = "customerdao"> </properation> </bean> <bean идентификатор? name = "hibernateTemplate" ref = "hibernateTemplate"/>-> <!-Класс шаблонов здесь не вводится здесь, а сеанс-фактическим, потому что сеанс потребностей шаблона (инкапсулированный сеанс)-> <Название свойства = "SessionFactory" ref = "SessionFactory"/> </bean> <!-Template Class (Property Name name name = "SessionFactory"/>, если Spring in name name name = "SessionFactory. Слой наследует hibernatedaosupport, нет необходимости настраивать-> <!-<bean id = "hibernateTemplate"> Inject SessionFactory <name = "sessionFactory"/> </bean>-> </beans>
4) Изменить класс действия
Поскольку класс внедрения бизнес -уровня вводится, метод бизнес -уровня может быть вызван непосредственно в настоящее время без загрузки боба
Пакет com.clj.web.action; import org.apache.struts2.servletactionContext; import org.springframework.web.context.webapplicationContext; импорт org.springframework.web.context.support.webapplicationcontextutils; importclj.domain.custtomer; com.clj.service.customerservice; import com.opensymphony.xwork2.actionsupport; импорт com.opensymphony.xwork2.modeldriven;/** * контрольный уровень клиента * @author Administrator * *//public CustomerAction расширяет acepploms Sultydriven <Customer> {//не забывает, чтобы увенчаться навсегда частным клиентом = New Customer Customer = New Customer (); Общественный клиент getModel () {вернуть клиент; } // Предоставьте атрибуты участника обслуживания и предоставьте SET MEDECTION Private Customers Customerservice; public void setCustomerservice (CustomerService Customer Senser) {this.customerservice = Customerservice; } / *** Сохранить клиента* @return* / public String add () {System.out.println ("Веб -уровень, сохранить клиента"); // Метод 1: Создание веб -фабрики (действие создается Struts2) /*webapplication context = webapplication contextutils.getwebapplicationcontext (servletactionContext.getServletContext ()); Customerservice CS = (Customerers) context.getBean ("Customer Sense"); // вызов метода Cs.save (клиент); */ customer service.save (клиент); вернуть нет; }}Весенняя интеграция Метод WIBERNATE TWO: (файл конфигурации без hibernate.cfg.xml)
Здесь мы собираемся удалить основной файл конфигурации Hibernate. Перед удалением вам необходимо настроить соответствующий контент в файле конфигурации в файл Spring Applicationincontext.xml, чтобы получить его.
1. Проверьте соответствующий содержимое в файле hibernate.cfg.xml
* Основные параметры подключения к базе данных (4 основных параметров)
* Связанные с гибернатом свойства
* Пул соединений
* Файлы карты
2. Внедрить конфигурацию
Ввести пул соединений
<!-Настройте пул соединений для C3P0 First-> <Bean id = "dataSource"> <name = "DriverClass" value = "com.mysql.jdbc.driver"/> <name = "jdbcurl" value = "jdbc: mysql: //192.168.174.130: 3306/ssh"/"//192.168.174.130: 3306/ssh"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/". value = "root"/> <name = "password" value = "root"/> </bean>
Измените соответствующий SessionFactory: поскольку нет файла конфигурации для hibernate.cfg.xml, вам необходимо изменить конфигурацию и ввести пул соединений.
Введите файл сопоставления объектов: потому что файл конфигурации hibernate.cfg.xml больше не сканируется, а файл конфигурации должен быть введен.
<!-Напишите бобы, имена исправлены и предоставляются в Spring для загрузки файла конфигурации hibernate.cfg.xml-> <bean id = "sessionfactory"> <!-Загрузите пул соединений First-> <name = "dataSource" ref = "dataSource"/> <! key = "hibernate.dialect"> org.hibernate.dialect.mysqlidialect </prop> <prop key = "hibernate.show_sql"> true </prop> <prop key = "hibernate.format_sql"> true </prop> <prop = "hibernate.hbm2 <!-Представьте файлы конфигурации сопоставления-> <name = name = "mappingResources"> <sist> <value> com/clj/domain/customer.hbm.xml </value> </list> </property> </bean>
Теперь: код ApplicationContext.xml выглядит следующим образом
<? 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: context = "http://www.springframework.org/schema/context" xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframe.orshema. xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.spramework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> <!-Настройка пула соединения для c3p0 first-> <bean id =" dataSource "> <pertive name =" riverclass " value = "com.mysql.jdbc.driver"/> <name = "jdbcurl" value = "jdbc: mysql: //192.168.174.130: 3306/ssh"/> <name = "user" value = "root"/> name = "password =" root "/> </bean> <! Чтобы загрузить файл конфигурации hibernate.cfg.xml-> <bean id = "sessionFactory"> <!-Загрузите пул соединений First-> <name = "dataSource" ref = "dataSource"/> <!-Загрузите диалект, нагружать параметры-> name = "hibernateproperties"> <props> key = "hibernate.dialect"> org.hibernate.dialect.mysqlidialect </prop> <prop key = "hibernate.show_sql"> true </prop> <prop key = "hibernate.format_sql"> true </prop> <prop = "hibernate.hbm2 <!-Введите файл конфигурации сопоставления-> <name = "mappingResources"> <sist> <datule> com/clj/domain/customer.hbm.xml </value> </list> </property> </bean> <!-Настройка менеджера транзакции платформы First-> <bean id = "TransactionManer"> <>-injust Transcation, сессия, сессия может управлять сессией. name = "sessionFactory" ref = "sessionFactory"/> </bean> <!-аннотация для открытия транзакции-manager = "transactionManager"/> <!-Настроить модуль клиента-> <!-Подчеркнуть: настроенный ацитон должен быть многоколонком-> <Bean Id = "CustomerAction" Scope = "Prototype"> <! постоянные struts.objectfactory.spring.autowire = имя включило его и может быть автоматически собрано. Вам нужно только предоставить заданный метод. Тем не менее, действие управляется Spring, и автоматическая сборка является недействительной, поэтому вам необходимо вручную выполнить инъекцию конфигурации-> <name = «custryervice» ref = "customer service"> </property> </bean> <bean id = "custryervice"> <name = "customerdao" ref = "customerdao"> </bean> <beano homeheher, a witherit, a with homeheher, a witherit a witherit, a witherit hue wormito guef uf = "uctientdao" HibernatedAosupport и Inject SessionFactory-> <Bean id = "customerdao"> <!-<name = "name =" hibernateTemplate "ref =" hibernateTemplate "/>-> <!-Класс шаблона не введен здесь, но сессионное, потому что шаблон нуждается в сеансе/сессии/сессии"/"SessionForty" ref-". <!- Настройте класс шаблонов (предоставленный платформой Hibernate, инкапсулированным сеансом) и в настоящее время передается управлению пружиной. If the persistence layer inherits HibernateDaoSupport, there is no need to configure --> <!-- <bean id="hibernateTemplate"> Inject sessionFactory <property name="sessionFactory"/> </bean>--></beans>
此时可以安心的删除hibernate.cfg.xml文件了
这样SSH整合完毕
六、Hibernate模板常用方法
注意:以下代码省略了接口中的演示(偷了个懒,相信初学者不会看不懂)
1)插入:
Постоянный слой
package com.clj.dao;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import org.springframework.orm.hibernate5.HibernateTemplate;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.clj.domain.Customer;/** * Persistence layer* Inherits HibernateDaoSupport and encapsulates HibernateTemplate internally * @author Administrator * */public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao { @Override public void update(Customer customer) { // TODO Auto-generated method stub this.getHibernateTemplate().update(customer); }}Бизнес -слой
package com.clj.service;import java.util.List;import org.springframework.transaction.annotation.Transactional;import com.clj.dao.CustomerDao;import com.clj.domain.Customer;/** * Customer's business layer* @author Administrator * */@Transactionalpublic class CustomerServiceImpl implements CustomerService{ private CustomerDao customerDao; public void setCustomerDao(CustomerDao customerDao) { this.customerDao = customerDao; } @Override public void update(Customer customer) { // TODO Auto-generated method stub customerDao.update(customer); }}Тестовый класс
package com.clj.test;import java.util.List;import javax.annotation.Resource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.clj.domain.Customer;import com.clj.service.CustomerService;/** * Simple way to test Hiberante template class* @author Administrator * */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class Demo1 { @Resource(name="customerService") private CustomerService customerService; /** * Test insert*/ @Test public void run1(){ Customer customer=new Customer(); customer.setCust_id(1L); customer.setCust_name("test"); customerService.update(customer); }}2)以下为指定查询、查询所有、离线查询代码
Постоянный слой
package com.clj.dao;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import org.springframework.orm.hibernate5.HibernateTemplate;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.clj.domain.Customer;/** * Persistence layer* Inherits HibernateDaoSupport and encapsulates HibernateTemplate internally * @author Administrator * */public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao { //Save data to the database (call template class (provided by hibernate, encapsulated session)) /*private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; }*/ /** * Save customer*/ public void save(Customer customer) { System.out.println("Permanent layer: save customer"); this.getHibernateTemplate().save(customer); } @Override public void update(Customer customer) { // TODO Auto-generated method stub this.getHibernateTemplate().update(customer); } /** * Query by primary key*/ public Customer getById(Long id) { return this.getHibernateTemplate().get(Customer.class, id); } /** * Query all*/ @Override public List<Customer> findAll() { String sql="from Customer"; List<Customer> list=(List<Customer>) this.getHibernateTemplate().find(sql); вернуть список; } /** * QBC offline query*/ @Override public List<Customer> findAllByQBC() { DetachedCriteria criteria=DetachedCriteria.forClass(Customer.class); List<Customer> list=(List<Customer>) this.getHibernateTemplate().findByCriteria(criteria); вернуть список; }}Бизнес -слой
package com.clj.service;import java.util.List;import org.springframework.transaction.annotation.Transactional;import com.clj.dao.CustomerDao;import com.clj.domain.Customer;/** * Customer's business layer* @author Administrator * */@Transactionalpublic class CustomerServiceImpl implements CustomerService{ private CustomerDao customerDao; public void setCustomerDao(CustomerDao customerDao) { this.customerDao = customerDao; } // Used to save customers public void save(Customer customer) { System.out.println("Business layer, save customer"); customerDao.save(customer); } @Override public void update(Customer customer) { // TODO Auto-generated method stub customerDao.update(customer); } @Override public Customer getById(Long id) { // TODO Auto-generated method stub return customerDao.getById(id); } @Override public List<Customer> findAll() { return customerDao.findAll(); } @Override public List<Customer> findAllByQBC() { // TODO Auto-generated method stub return customerDao.findAllByQBC(); }}Тестовый класс
package com.clj.test;import java.util.List;import javax.annotation.Resource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.clj.domain.Customer;import com.clj.service.CustomerService;/** * Simple way to test Hiberante template class* @author Administrator * */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class Demo1 { @Resource(name="customerService") private CustomerService customerService; /** * Test insert*/ @Test public void run1(){ Customer customer=new Customer(); customer.setCust_id(1L); customer.setCust_name("test"); customerService.update(customer); } /** * Test query the specified customer*/ @Test public void run2(){ Customer customer=customerService.getById(2L); System.out.println(customer); } /** * Query all customers*/ @Test public void run3(){ List<Customer> list=customerService.findAll(); System.out.println (список); } /** * QBC(offline query) */ @Test public void run4(){ List<Customer> list=customerService.findAllByQBC(); System.out.println (список); }}七、关于SSH延迟加载问题
1. 使用延迟加载的时候,再WEB层查询对象的时候程序会抛出异常!
* 原因是延迟加载还没有发生SQL语句,在业务层session对象就已经销毁了,所以查询到的JavaBean对象已经变成了托管态对象!
* 注意:一定要先删除javassist-3.11.0.GA.jar包(jar包冲突了)
2. Решение
Spring框架提供了一个过滤器,让session对象在WEB层就创建,在WEB层销毁。只需要配置该过滤器即可
* 但是:要注意需要在struts2的核心过滤器之前进行,spring监听器之后配置
<!-- 解决延迟加载的问题--> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3、演示延迟加载
持久层:调用load方法,此方法时延迟加载的
/** * Lazy load*/ @Override public Customer loadById(long id) { // TODO Auto-generated method stub return this.getHibernateTemplate().load(Customer.class, id); }Бизнес -слой
@Override public Customer loadById(long id) { // TODO Auto-generated method stub return customerDao.loadById(id); }Тестовый класс
@Test public void run5(){ Customer customer=customerService.loadById(2L); System.out.println(customer); }Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.