返回:[web工程]Struts2+Spring3.1+Hibernate3.6的集成
上一步:[web工程]集成spring
集成hibernate
- 创建数据库,脚本见:docs/db/mysql目录
create table APP_USER ( id int, name varchar(100), password varchar(100) ) engine = innodb default charset = utf8 comment '系统用户'; alter table APP_USER add constraint PK_APP_USER primary key (ID); alter table APP_USER change id id int auto_increment; create index IND_APP_USER_NAME ON APP_USER(name);
- 复制jar到WEB-INF/lib目录,并添加到java build path
- hibernate相关:
hibernate-jpa-2.0-api-1.0.0.Final.jar hibernate3.jar jta-1.1.jar dom4j-2.0.0-ALPHA-2.jar commons-collections-3.2.1.jar antlr-2.7.7.jar
- spring相关:
aopalliance.jar org.springframework.orm-3.1.0.M1.jar org.springframework.transaction-3.1.0.M1.jar org.springframework.jdbc-3.1.0.M1.jar
- jdbc相关:
c3p0-0.9.1.2.jar mysql-connector-java-5.1.13-bin.jar
- hibernate相关:
- 创建User实体类和配置文件hbm
- User.java
package org.skzr.demo.model; import java.io.Serializable; /** * 系统用户 * @author <a href="mailto:skzr.org@gmail.com">skzr.org</a> * @version 1.0.0 */ public class User implements Serializable { private static final long serialVersionUID = 1L; /** 唯一标识 */ private Integer id; /** 用户名 */ private String name; /** 密码 */ private String password; /** * @return id */ public Integer getId() { return id; } /** * @param id id */ public void setId(Integer id) { this.id = id; } /** * @return name */ public String getName() { return name; } /** * @param name name */ public void setName(String name) { this.name = name; } /** * @return password */ public String getPassword() { return password; } /** * @param password password */ public void setPassword(String password) { this.password = password; } }
- hbm文件
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.skzr.demo.model" default-lazy="false"> <class name="User" table="APP_USER"> <id name="id"/> <property name="name" /> <property name="password" /> </class> </hibernate-mapping>
- User.java
- 改写spring配置文件applicationContext.xml,创建配置文件:common.properties和init.properties说明见:docs/项目说明
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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="ignoreResourceNotFound" value="true" /> <property name="fileEncoding" value="UTF-8" /> <property name="locations"> <list> <value>classpath:common.properties</value> <value>classpath:init.properties</value> </list> </property> </bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClass}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxPoolSize" value="${jdbc.maxPoolSize}" /> <property name="acquireIncrement" value="${jdbc.acquireIncrement}" /> <property name="initialPoolSize" value="${jdbc.minPoolSize}" /> <property name="minPoolSize" value="${jdbc.minPoolSize}" /> <property name="maxIdleTime" value="${jdbc.maxIdleTime}" /> <property name="autoCommitOnClose" value="${jdbc.autoCommit}" /> <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}" /> <property name="maxIdleTimeExcessConnections" value="${c3p0.maxIdleTimeExcessConnections}" /> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="hibernateTransactionManager"/> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="jdbcDaoSupport" class="org.springframework.jdbc.core.support.JdbcDaoSupport" abstract="true"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop> <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop> <prop key="hibernate.connection.autocommit">${jdbc.autoCommit}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> </props> </property> <property name="mappingLocations"> <list> <value>${hibernate.mappingLocations}</value> </list> </property> </bean> <bean id="loginAction" class="org.skzr.demo.action.LoginAction" scope="prototype"/> <context:component-scan base-package="org.skzr.demo"/> </beans>
- 创建DAO和Service,改写Action实现数据库验证逻辑
- 这里很多地方都用到了注解的方式来注入bean
- LoginAction实际对于xml文件中配置的bean id=loginAction并未配置AppService,实际上这个阿扁跑Service是通过注解来自动注入的,是一种xml和注解混合的方式
- 运行登录页面看看效果
- 完整程序demo下载分卷压缩1,分卷压缩2Good luck ^ ^