Spring第四天——SSH整合
(从整合开始,使用回归使用eclipse)
一、三大框架版本:
struts2
hibernate5
spring4
二、SSH三大框架回顾:
Hibernate:
ORM思想
核心配置文件:
单独使用时名称和位置是固定,整合时不是固定的
会有一个HibernateTemplate的封装
Struts2:
核心组成:
action
处理提交表单数据,操作域对象
值栈
存取数据的方法
拦截器
AOP和责任链模式
Spring:
IoC和AOP是spring的灵魂
引入的是schema约束
三、SSH整合的思想
web:===struts2
service:===spring
dao:hibernaate
web调service,service调dao
整合思想就是两个两个整合:1.struts2和spring整合,2.spring和hibernate整合
1.把struts2里面的action对象的创建交给spring管理
需要记得配置除了 id 和 class ,还要有scope为prototype为多实例
2.把数据库配置信息交给spring
第一次访问时需要创建sessionFactory比较慢,把这个对象的创建交给spring管理
让对象在服务器在启动时创建
整合准备工作:
先列出所有jar图,后面导包不再单独贴图(从log4j处接上)
1.struts2和spring整合
新建项目:SSHDemo,整合目标是:使IOC容器来管理struts2的action
目录结构如下:
导入spring的14个jar包(day03里除去mysql驱动包)
再导入整合的jar包 :struts-spring-plugin的jar包(如图所示,注意版本2.3.4)
再加整合web项目的jar包:spring-web.jar
接下来导入strus2的jar包(day03的jar加上jstl的两个包共15个包
建一个action:UserAction
package cn.action; import com.opensymphony.xwork2.ActionSupport; import cn.service.UserService; public class UserAction extends ActionSupport { //注入service
private UserService userService; public void setUserService(UserService userService) {
this.userService = userService;
} @Override
public String execute() throws Exception {
System.out.println("Hello SSH!");
userService.add();
return NONE;
}
}
(eclipse并没有自带jstl的包:jstl.jar standard.jar,找jstl在me里自带有))
配置struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="sshdemo1" extends="struts-default" namespace="/">
<!-- 没有返回值,不需要result -->
<action name="userAction" class="userAction"></action>
</package>
</struts>
不要忘了配置过滤器(在下面web.xml中一并列出)
创建spring的配置文件
把action由struts.xml交给spring管理(可以看struts-plugin.xml中可以看到相关的配置,将实例创建交给spring)
先从IOC容器获取,如果没有的话,就利用反射创建
<!-- 配置action对象,注意是多实例 -->
<bean id="userAction" class="cn.action.UserAction" scope="prototype">
<!-- 注入service -->
<property name="userService" ref="userService"></property>
</bean>
配置监听器:让服务器启动时加载一些需要的资源
配置context-param
(src下又叫类路径)
【更新】非web应用都是在main方法中直接创建得到IOC容器(applicationContext)
1.web应用我们希望在什么时候创建IOC容器呢,应该是在服务器启动时加载,当然这个时间我们是无法控制的,我们把这个任务交给监听器: ServletContextListener (由spring提供了一个监听器)
2.那么在web应用中如何访问IOC容器呢,我们把它(IOC容器)放在ServletContext(也是一个域对象中)
我们可以点开源码大致看一下,有类似的流程
- 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
- 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
- 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
init-param类同
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SSHDemo</display-name> <!-- 配置过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring的监听-->
<!-- 指定spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean1.xml</param-value>
</context-param>
<!-- 配置监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
//context-param 和 listener 称为 spring的监听的配置
现在有两个配置文件都有配置action,会导致两边创建两次action
解决方案是stuts.xml中action的class不写全路径,写spring的id值(前提是要引入struts-spring-plugin的整合jar包)
<action name="userAction" class="userAction"></action>
2.spring和hibernate整合
搭建Hibernate环境,导入Hibernate的jar包
整合目标:使IOC容器去管理sessionFactory,并使hibernate程序用上声明式事务
导入整合orm框架的jar包:spring-orm——所有的持久层的东西都一定记得导入相关的驱动
核心就分三步:
配置数据源
导入资源文件(当然需要先创建)(加入<context>命名空间)
配置数据源信息
配置sessionFactory
由spring提供的LocalSessionFactoryBean实现(实例见下方)
配置声明式事务
注意事务管理器的名称变为 Hibernate的管理器(加入<tx><aop>)
三步的的细节(如需要注入的东西)见下文详细步骤
创建实体类:
User //必须有一个唯一属性值
package cn.entity; public class User { //实体类必须有一个唯一属性值
private String uid;
private String username;
private String password;
private String address; public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", address=" + address + "]";
}
}
创建映射文件User.hbm.xml
<?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>
<!-- 映射的类 name是类的全路径 table是表名 -->
<class name="cn.entity.User" table="t_ssh_user">
<id name="uid" column="uid">
<!-- 设置id增长策略 -->
<generator class="uuid"></generator>
</id>
<!-- 配置其它属性 -->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
创建核心配置文件(引入工具类:创建的工具类不在同级目录下,按一下F5就好了...)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 一、配置数据库的信息,交给spring连接池替代 -->
<!-- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property> -->
<!-- 二、配置hibernate信息 可选项 -->
<!-- 输出底层SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语句 -->
<property name="hibernate.format_sql">true</property>
<!-- 如果没有表,创建 已有表 更新 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置MySQL方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 三、引入映射文件 -->
<mapping resource="cn/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
配置后执行一下工具类,看配置是否正确
package cn.utils; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtils { private static Configuration cfg = null;
private static SessionFactory sessionFactory = null;
//静态代码块实现
static {
cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
//提供静态方法返回sessionFactory
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
//返回本地线程绑定的session
public static Session getSessionObject(){
return sessionFactory.getCurrentSession();
}
public static void main(String[] args) { }
}
把sessionFactory的创建交给spring管理:
LocalSessionFactoryBean是spring封装的类,帮我们加载配置文件,创建sessionFactory
也就是代替我们原来工具类的代码
<!-- 配置SessionFactory,交给spring管理 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 指定hibernate核心配置文件位置 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
dao使用HibernateTemplate:
先创建service和dao(Dao使用面向接口编程)
UserDao
package cn.dao; public interface UserDao { void add();
}
UserDaoImpl
package cn.dao; import org.springframework.orm.hibernate5.HibernateTemplate; import cn.entity.User; public class UserDaoImpl implements UserDao { //注意导的包是5的版本
private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
} @Override
public void add() {
//使用配置文件实现
//创建模板,传入sessionFactory
/* HibernateTemplate hibernateTemplate =
new HibernateTemplate(sesseionFactory);*/
System.out.println("dao.add");
User user = new User();
user.setUsername("jack");
user.setPassword("123");
user.setAddress("北京");
hibernateTemplate.save(user); } }
UserService
package cn.service; import javax.transaction.Transactional; import cn.dao.UserDao; @Transactional
public class UserService { //注入dao,注意写接口(多态特性) UserDao dao = new UserDaoImpl()
private UserDao userDao; public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void add() {
System.out.println("service.add");
userDao.add(); }
}
完成注入关系:
action注入service service注入dao
在dao使用HibernateTemplate
在模板中注入sessionFactory
在dao中注入hibernateTemplate
配置事务管理器:
注入dataSource(day03)
现在建议注入sessionFactory (它包含dataSource)
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property
</bean>
<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
在service类上加transactional注解(类的完整信息见上文)
@Transactional
public class UserService {
下面是 HibernateTemplate的常用方法。
delete(Object entity): 删除指定持久化实例。
deleteAll(Collection entities): 删除集合内全部持久化类实例。
find(String queryString): 根据 HQL 查询字符串来返回实例集合。
findByNamedQuery(String queryName): 根据命名查询返回实例集合。
get(Classentity Class,Serializable id): 根据主键加载特定持久化类的实例。
save(Object entity): 保存新的实例。
saveOrUpdate(Object entity): 根据实例状态,选择保存或者更新。
update(Object entity): 更新实例的状态,要求entity 是持久状态。
setMaxResults(intmax Results): 设置分页的大小。
这里只演示添加的save ,其它类同,对比Hibernate
find()方法可以查询所有记录,传入HQL,后面可以接可变参数
但是find()不能使用分页,需要使用离线的critria(待补充)
方法所在类为上文UserDaoImpl
@Override
public void add() {
//使用配置文件实现
//创建模板,传入sessionFactory
/*HibernateTemplate hibernateTemplate =
new HibernateTemplate(sesseionFactory);*/
System.out.println("dao.add");
User user = new User();
user.setUsername("jack");
user.setPassword("123");
user.setAddress("北京");
hibernateTemplate.save(user); }
特别注意主键生成策略与主键的对应!uuid为对应String的id值!
DaImpl可以继承这个类HibernateDaoSupport,这个父类有模板属性和set()方法
并且里面有createHibernateTemplate,直接帮我们实现了注入。
直接注入sessionFactory即可,无需在配置文件中创建hibernateTemplate对象,也不用注入
在hibernate配置文件中配置了与本地线程绑定的session的配置
hibernateTemplate里面已经实现了,不需要在spring里再写了,那句配置可以去掉了<>thread</>
继承后得到HibernateTemplate:this.getHibernateTemplate()
package cn.dao; import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport; public class UserDaoImpl2 extends HibernateDaoSupport implements UserDao { @Override
public void add() {
HibernateTemplate hibernateTemplate =
this.getHibernateTemplate(); } }
大致过程小结:
框架整合大致过程:
导包:(如果公司,大多统一提供)
创建struts2环境
1)创建action,创建struts.xml,配置action
2)配置struts2过滤器
搭建hibernate环境
1)创建实体类
2)创建映射文件,建立表语实体类映射关系
3)创建核心配置文件,引入映射文件
搭建spring环境
1)创建spring核心配置文件
2)让spring在服务器启动时加载配置文件
配置监听器,指定spring配置文件路径 struts2和spring整合
1)action在spring配置(多实例)
在strutsxml的action的class写spring配置文件action的id值
spring和hibernate整合
1)把hibernate核心配置文件的数据库的配置在spring里配置(使用连接池)
2)把sessionFactory在spring配置(spring有一个封装的类)
记得对sessionFactory进行属性注入 完成action注入service;service注入dao;dao注入HibernateTemplate
dao里使用hibernate模板(先要创建模板对象才能注入)
配置事务
配置完成后需要加注解
完整的整合的三大配置文件信息如下:
bean1.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: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-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.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"> <!-- 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 进行属性注入 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/hibernate"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean> <!-- 配置SessionFactory,交给spring管理 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 指定hibernate核心配置文件位置 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean> <!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置action对象,注意是多实例 -->
<bean id="userAction" class="cn.action.UserAction" scope="prototype">
<!-- 注入service -->
<property name="userService" ref="userService"></property>
</bean> <!-- 配置service对象 -->
<bean id="userService" class="cn.service.UserService">
<!-- 注入dao -->
<property name="userDao" ref="userDaoImpl"></property>
</bean> <!-- 创建dao实现类对象 -->
<bean id="userDaoImpl" class="cn.dao.UserDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean> <!-- 创建hibernateTemplate模板对象 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!-- 注入sessionFactory,上面已经创建,可以打开源码看属性 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 一、配置数据库的信息,交给spring连接池替代 -->
<!-- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property> -->
<!-- 二、配置hibernate信息 可选项 -->
<!-- 输出底层SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语句 -->
<property name="hibernate.format_sql">true</property>
<!-- 如果没有表,创建 已有表 更新 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置MySQL方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 三、引入映射文件 -->
<mapping resource="cn/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="sshdemo1" extends="struts-default" namespace="/">
<!-- 没有返回值,不需要result -->
<action name="userAction" class="userAction"></action>
</package>
</struts>
其它整合操作:(感觉第一种结构更简明)
1)整合hibernate框架的时候,把hibernate基本信息和引入映射都写入spring配置文件
这样,hibernate核心配置文件就可以去除了
打开类LocalSessionFactoryBean可以看到一些属性
先改配置文件 bean1.xml
配置hibernate基本信息
Properties hibernateProperties; 注入properties见前面属性注入
配置引入映射:
String[] mappingResources;注入集合的方式,可以注入多个
测试启动服务器多了一个表,即配置正常
<?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-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.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"> <!-- 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 进行属性注入 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/hibernate"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean> <!-- 配置SessionFactory,交给spring管理 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 指定hibernate核心配置文件位置 -->
<!-- <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> -->
<!-- 配置hibernate基本信息 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
<!-- 配置映射文件引入 -->
<property name="mappingResources">
<list>
<value>cn/entity/User.hbm.xml</value>
</list>
</property>
</bean> <!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <import resource="classpath:user.xml"/>
</beans>
spring分模块开发:
(之前的include引入可以解决,回顾struts2的分模块开发)
解决的是多人协作的维护问题
把核心配置文件的一部分:例如action部分拿出来
再用include单独引用
复制一份,删掉部分,进行引入(这里引入user.xml)
使用import
user.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: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-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.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"> <!-- 配置action对象,注意是多实例 -->
<bean id="userAction" class="cn.action.UserAction" scope="prototype">
<!-- 注入service -->
<property name="userService" ref="userService"></property>
</bean> <!-- 配置service对象 -->
<bean id="userService" class="cn.service.UserService">
<!-- 注入dao -->
<property name="userDao" ref="userDaoImpl"></property>
</bean> <!-- 创建dao实现类对象 -->
<bean id="userDaoImpl" class="cn.dao.UserDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean> <!-- 创建hibernateTemplate模板对象 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!-- 注入sessionFactory,上面已经创建,可以打开源码看属性 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
引入:(完整的bean1.xml见上文)
<import resource="classpath:user.xml"/>
Spring第四天——SSH整合的更多相关文章
- spring学习(四) ———— 整合web项目(SSH)
清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...
- SSH整合之spring整合hibernate
SSH整合要导入的jar包: MySQL中创建数据库 create database ssh_db; ssh_db 一.spring整合hibernate带有配置文件hibernate.cfg.xml ...
- Spring(八)SSH整合简述
一.Spring与Struts2的整合 1.1.整合步骤 1.2.配置web.xml 1.3.配置spring配置文件applicationContext.xml 1.4.配置struts配置文件 1 ...
- Spring自学教程-ssh整合(六)
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址 ...
- SSH(Spring Struts2 Hibernate)框架整合(注解版)
案例描述:使用SSH整合框架实现部门的添加功能 工程: Maven 数据库:Oracle 框架:Spring Struts2 Hibernate 案例架构: 1.依赖jar包 pom.xml < ...
- SSH(Spring Struts2 Hibernate)框架整合(xml版)
案例描述:使用SSH整合框架实现部门的添加功能 工程: Maven 数据库:Oracle 案例架构: 1.依赖jar包pom.xml <project xmlns="http://ma ...
- ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存
ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate : Hibernate是一个持久层框架,经常访问物理数据库 ...
- MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法
MVC+Spring.NET+NHibernate .NET SSH框架整合 在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MV ...
- Spring学习笔记(六)—— SSH整合
一.整合原理 二.整合步骤 2.1 导包 [hibernate] hibernate/lib/required hibernate/lib/jpa 数据库驱动 [struts2] struts-bla ...
随机推荐
- docker的网络基础配置
一.端口映射实现访问容器 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射.当使用-P标记时,Docker会随机映射一个49000~49900的端口至容器内部开放 ...
- python文本文件处理和用户输入
#用户输入 a = input('please input: ') #这个输入什么即是什么,比如输入1,则a变量=1,输入'abc',则a变量 = 'abc',输入abc则报错,因为会把abc当做一个 ...
- 教你使用Paw解析http请求
教你使用Paw解析http请求 软件下载地址: 链接: http://pan.baidu.com/s/1gdzmjq7 密码: 3mpb 这款应用的图片像极了百度,哈哈. 支持的请求方式: 完整的显示 ...
- DES加密(支持ARC与MRC)
DES加密(支持ARC与MRC) 源文件: YXCrypto.h 与 YXCrypto.m // // YXCrypto.h // 用秘钥给字符串加密或者解密 // // Created by You ...
- Request URL参数
登录跳转完整参考: http://www.cnblogs.com/dreamer-fish/p/5435274.html request.META.get('HTTP_REFERER', '/') # ...
- .Net开发八年,坐标杭州,上个月换工作感觉现在.Net岗位很少,希望和同在杭州的同行们交流一下
.Net开发八年,坐标杭州,中间做过2年Java, 目前新入职一家做防伪溯源的中型公司,200人左右, 之前在一家500人规模的软件公司工作过4年,后面2年工作过3家互联网创业公司, 上个月换工作感觉 ...
- React onPaste 获取粘贴板的值
React 中, 获取 粘贴板的值, 使用下面的方法 console.log(e.clipboardData.getData('Text')); 如果是 JS 中的 onpaste 事件, 则使用 v ...
- Alpha 冲刺报告(2/10)
Alpha 冲刺报告(2/10) 队名:洛基小队 团队困难汇总:在开始正式编码的时候遇到了很严重的问题,Cocos Creator的教程过少,之前浏览的官网上的教程以为很齐全,但是在最重要的脚本方面还 ...
- CSS3 Transform变形理解与应用
CSS3 Transform变形理解与应用 Transform:对元素进行变形:Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.但只有两个关键贞.开 ...
- TensorFlow函数(十)tf.global_variables_initializer()
tf.global_variables_initializer() 此函数是初始化模型的参数 with tf.Session() as sess: tf.global_variables_initia ...