SSH框架整合的一些步骤整理(一)

SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。
下面开始SSH框架的整合,使用MyEclipse开发。
先实现spring和hibernate的整合:

一、新建一个web项目,添加spring功能

二、添加hibernate功能选择3.3版本,直接finish

三、添加完成后,可以看到applicationContext.xml文件。hibernateSessionFactory工厂类可以删除,由spring提供。为了jdbc连接,添加mysql-connector-java包

四、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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
	</bean>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props></props>
		</property>
	</bean></beans>

五、创建一个pojo类,以Province类示例,使用注解注释类

对应MySQL数据库的news数据库和hat_province表(id,provinceID,province)

package demo.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="hat_province",catalog="news")
public class Province {
	private int id;
	private String provinceId;
	private String province;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Column(name="provinceID")
	public String getProvinceId() {
		return provinceId;
	}
	public void setProvinceId(String provinceId) {
		this.provinceId = provinceId;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	
}

没有注解类需要添加hibernate的包如下(添加Entity Manager):

六、接下来修改applicationContext.xml内容如下:

(1)配置数据源

<!-- 配置数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<!-- 设置的是最大空闲连接数 -->
		<property name="maxIdle" value="10" />
		<!-- 设置的是最大连接数 -->
		<property name="maxActive" value="100" />
		<!-- 最长连接响应时间 -->
		<property name="maxWait" value="1000" />
		<!-- 连接池初始创建的连接数 -->
		<property name="minIdle" value="10" />
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost/news?characterEncoding=UTF-8" />
		<property name="username" value="root" />
		<property name="password" value="" />
	</bean>

(2)配置session工厂(用注解的方式)

<!-- 配置注解文件 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<!-- 要配置数据源,name属性的值应为dataSource -->
		<property name="dataSource" ref="dataSource" />
		<!-- 要配置注解类,name属性的值应为annotatedClasses -->
		<property name="annotatedClasses">
			<list>
				<value>demo.pojo.Province</value>
				<!-- <value>demo.pojo.City</value> <value>demo.pojo.Area</value> -->
			</list>
		</property>
		<!-- 要配置hibernate的其他属性,name的值应为hibernateProperties -->
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop><!-- 是否显示sql语句 -->
			</props>
		</property>
	</bean>

(3)配置事务

<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>

	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="get*" read-only="true" />
			<tx:method name="*" />
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut id="bizMethods" expression="execution(* demo.dao..*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />
	</aop:config>

如果出错,需要更改头部:

<?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.1.xsd  
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

七、新建dao,与数据库进行交互:

接口ProvinceDao:

package demo.dao;

import java.util.List;

import demo.pojo.Province;

public interface ProvinceDao {

	public abstract List<Province> find(Province p, int pageIndex, int pageSize);

	public abstract void delete(Province p);

	public abstract void add(Province p);

}

ProvinceDaoImpl(session不要导错包,session通过注入获得):

package demo.dao.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Example;

import demo.dao.ProvinceDao;
import demo.pojo.Province;

public class ProvinceDaoImpl implements ProvinceDao {
	
	private SessionFactory factory;
	
	public void setFactory(SessionFactory factory) {
		this.factory = factory;
	}
	@Override
	public List<Province> find(Province p,int pageIndex,int pageSize){
		Session session = factory.getCurrentSession();
		return session.createCriteria(Province.class).add(Example.create(p)).
				setFirstResult((pageIndex-1)*pageSize).setMaxResults(pageSize).list();
	}
	@Override
	public void delete(Province p){
		Session session = factory.getCurrentSession();
		session.delete(p);
	}
	@Override
	public void add(Province p){
		Session session = factory.getCurrentSession();
		session.save(p);
	}
}

在配置文件中添加:

<bean name="provinceDao" class="demo.dao.impl.ProvinceDaoImpl">
		<property name="factory" ref="sessionFactory"></property>
	</bean>

八、测试,新建一个test类:

package demo.test;

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import demo.dao.ProvinceDao;
import demo.pojo.Province;

public class TestS {
	@Test
	public void test() {
		// 加载配置文件
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		// 根据配置文件注入bean
		ProvinceDao bean = (ProvinceDao) ctx.getBean("provinceDao");
		List<Province> list = bean.find(new Province(), 1, 10);// 查询第一页10条记录
		for (Province province : list) {
			System.out.println(province.getProvinceId() + ":"
					+ province.getProvince());
		}
	}
}

运行结果:

如果出错,请查看是否添加hibernate的Entity Manager,或者jdbc包没加




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值