struts2学习4——ssh

一.搭建基于SSH的程序框架
二.整合Spring和Hibernate
三.使用声明式事务
四.整合Spring与Struts2

五.使用注解实现SSH继承


一.搭建基于SSH的程序框架

开发SSH需要的jar包

二.整合Spring和Hibernate

使用SSH实现用户登录

1.添加3个框架所需的JAR文件
2.在Spring中配置数据源对象和会话工程
3.实现并配置DAO
4.实现并配置Service
5.为业务层添加事务管理
6.实现并配置Action
7.创建JSP测试页面(登录页面)


在Spring中配置数据源和会话工厂
方法一:定义独立的Hibernate配置文件,由Spring导入并创建会话工厂Bean
方法二:在Spring配置文件中进行集中配置
   先配置数据源,再以此为基础配置会话工厂Bean
   持久化类的映射文件可以逐个配置,也可以按目录导入。

方式一:

有hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>
 <session-factory name="">
  <!-- 数据库连接 
 jdbc驱动程序 -->
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <!-- 连接数据库的URL 
		serverTimezone=GMT 可以解决报错The server time zone value '?й???????' is unrecognized or represents more than one time zone. You mu
		-->
  <property name="connection.url">jdbc:mysql://localhost:3306/ssh?useUnicode=true&characterEncoding=utf-8</property>
  <!-- 用户名 -->
  <property name="connection.username">root</property>
  <!-- 密码 -->
  <property name="connection.password">123456</property>
  <!-- 指定连接的语言 -->
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="show_sql">true</property>
  <property name="cache.query_cache_factory">true</property>
  
  <mapping resource="cn/houserent/entity/HouseUser.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

applicationContext.xml

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation">
			<value>
				classpath:hibernate.cfg.xml
			</value>
		</property>
	</bean>

测试

@Test
	public void testSpringSessionFactory(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		SessionFactory sessionFactory = (SessionFactory) ctx.getBean("sessionFactory");
		
		Transaction tx = sessionFactory.openSession().beginTransaction();
		List<HouseUser> hu = sessionFactory.openSession().createQuery("from HouseUser").list();
		for(HouseUser user : hu){
			System.out.println(user.getUsername());
		}
		tx.commit();
	}

方法二

<?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:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
			
	<!-- 方法二:在Spring配置文件中进行集中配置
   先配置数据源,再以此为基础配置会话工厂Bean
   持久化类的映射文件可以逐个配置,也可以按目录导入。	
	 -->
	 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		 <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	 	<property name="url" value="jdbc:mysql://localhost:3306/ssh?useUnicode=true&characterEncoding=utf-8"/>
		<!-- 用户名 -->
		<property name="username" value="root"/>
		<!-- 密码 -->
		<property name="password" value="123456"/>
	 </bean>
	 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	 	<property name="dataSource" ref="dataSource"/><!--指明数据源-->
	 	<property name="hibernateProperties">
	 		<props>
	 			<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
	 			<prop key="show_sql">true</prop>
	 			<prop key="format_sql">true</prop>
	 			<prop key="javax.persistence.validation.mode">none</prop><!-- 持久化配置 -->
	 		</props>
	 	</property>
	 	
	 	<property name="mappingResources">
	 		<list>
	 			<value>cn/houserent/entity/HouseUser.hbm.xml</value>
	 		</list>
	 	</property>
	 </bean>
</beans>

DAO类继承HibernateDaoSupport

使用getHibernateTemplate()方法获取HibernateTemplate实例完成持久化操作。

DAO

package cn.houserent.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import cn.houserent.entity.HouseUser;

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

	@Override
	public HouseUser findUser(String name, String password) {
		// TODO Auto-generated method stub
		List<HouseUser> users = this.getHibernateTemplate().find("from HouseUser u where u.username=? and u.password=?",name,password);
		if(users.size() >0){
			return users.get(0);
		}else{
			return null;
		}
	}

}

applicationContext.xml

<!-- 省略sessionFactory-->
<!-- Dao -->
	 <bean id="userDao" class="cn.houserent.dao.UserDaoImpl">
	 	<property name="sessionFactory" ref="sessionFactory"/><!-- 给他设置sessionFactory参数,才能够拿到HibernateDaoSupport -->
	 </bean>

测试

@Test
	public void testUserDao(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		UserDao userDao = (UserDao) ctx.getBean("userDao");
		HouseUser user = userDao.findUser("2", "1");
		if(user != null){
			System.out.println("用户存在");
		}else{
			System.out.println("用户不存在");
		}
	}


使用Spring模板能简化编码过程,并且不再直接依赖Hibernate

@Override
	public List<HouseUser> findUsers(final int page, final int size) {
		// TODO Auto-generated method stub
		return this.getHibernateTemplate().execute(new HibernateCallback<List<HouseUser>>(){

			@Override
			public List<HouseUser> doInHibernate(Session session) throws HibernateException, SQLException {
				// TODO Auto-generated method stub
				Query query = session.createQuery("from HouseUser");
				query.setFirstResult((page -1)*size);//当把方法中的局部变量传递给它的内部类使用时,必须把该变量声明为final
				query.setMaxResults(size);
				return query.list();
			}
			
		});
	}

测试

@Test
	public void testUserDao1(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) ctx.getBean("userDao");
		
		List<HouseUser> users = userDao.findUsers(1, 2);
		for(HouseUser user : users){
			System.out.println(user.getUsername());
		}
	}


三.使用声明式事务



四.整合Spring与Struts2


五.使用注解实现SSH继承


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值