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包没加