JavaWeb_(Spring框架)Spring整合Hibernate
Dao层类要继承HibernateDaoSupport.java父类
原先使用Hibernate框架hibernate.cfg.xml配置数据库
<hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty> <property name="hibernate.connection.url">jdbc:mysql:///springproperty> <property name="hibernate.connection.username">rootproperty> <property name="hibernate.connecton.password">123456property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty> <property name="hibernate.show_sql">trueproperty> <property name="hibernate.format_sql">trueproperty> <property name="hibernate.hbm2ddl.auto">updateproperty> <property name="hibernate.connection.isolation">4property> <property name="hibernate.current_session_context_class">threadproperty> <mapping resource="com/Gary/domain/User.hbm.xml"/> session-factory> hibernate-configuration>
<?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> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty> <property name="hibernate.connection.url">jdbc:mysql:///springproperty> <property name="hibernate.connection.username">rootproperty> <property name="hibernate.connecton.password">123456property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty> <property name="hibernate.show_sql">trueproperty> <property name="hibernate.format_sql">trueproperty> <property name="hibernate.hbm2ddl.auto">updateproperty> <property name="hibernate.connection.isolation">4property> <property name="hibernate.current_session_context_class">threadproperty> <mapping resource="com/Gary/domain/User.hbm.xml"/> session-factory> hibernate-configuration>hibernate.cfg.xml
使用Spring框架整合Hibernate后
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql:///spring">property>
<property name="driverClass" value="com.mysql.jdbc.Driver">property>
<property name="user" value="root">property>
<property name="password" value="123456">property>
bean>
<bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="">property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectprop>
<prop key="hibernate.show_sql">trueprop>
<prop key="hibernate.format_sql">trueprop>
<prop key="hibernate.hbm2ddl.auto">trueprop>
<prop key="hibernate.current_session_context_class">threadprop>
props>
property>
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:component-scan base-package="com.Gary">context:component-scan> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="jdbc:mysql:///spring">property> <property name="driverClass" value="com.mysql.jdbc.Driver">property> <property name="user" value="root">property> <property name="password" value="123456">property> bean> <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource">property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectprop> <prop key="hibernate.show_sql">trueprop> <prop key="hibernate.format_sql">trueprop> <prop key="hibernate.hbm2ddl.auto">updateprop> <prop key="hibernate.current_session_context_class">threadprop> props> property> <property name="mappingDirectoryLocations" value="classpath:com/Gary/domain">property> bean> <bean name = "userAction" class="com.Gary.web.UserAction" scope="prototype"> <property name="userService" ref="userService">property> bean> <bean name="userService" class="com.Gary.service.UserService"> <property name="userDao" ref="userDao">property> bean> <bean name="userDao" class="com.Gary.dao.UserDao"> <property name="sessionFactory" ref="sessionFactory">property> bean> beans>applicationContext.xml
在Dao层用到Session session = HibernateUtils.getCurrentSession();获得session可以修改成
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
在Service层用到的关于事务的开启我们可以统一在applicationContext.xml中进行配置
开启事务Transaction beginTransaction = HibernateUtils.getCurrentSession().beginTransaction();
事务回滚beginTransaction.rollback();
提交事务beginTransaction.commit();
在applicationContext.xml中配置事务核心管理器
<bean name="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory">property>
bean>
<tx:advice id="advice"
transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" />
tx:attributes>
tx:advice>
<aop:config>
<aop:pointcut
expression="execution(* com.Gary.service.*.*(..))" id="pc" />
<aop:advisor advice-ref="advice" pointcut-ref="pc" />
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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:component-scan base-package="com.Gary">context:component-scan> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="jdbc:mysql:///spring">property> <property name="driverClass" value="com.mysql.jdbc.Driver">property> <property name="user" value="root">property> <property name="password" value="123456">property> bean> <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource">property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectprop> <prop key="hibernate.show_sql">trueprop> <prop key="hibernate.format_sql">trueprop> <prop key="hibernate.hbm2ddl.auto">updateprop> props> property> <property name="mappingDirectoryLocations" value="classpath:com/Gary/domain">property> bean> <bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory">property> bean> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" /> tx:attributes> tx:advice> <aop:config> <aop:pointcut expression="execution(* com.Gary.service.*.*(..))" id="pc" /> <aop:advisor advice-ref="advice" pointcut-ref="pc" /> aop:config> <bean name = "userAction" class="com.Gary.web.UserAction" scope="prototype"> <property name="userService" ref="userService">property> bean> <bean name="userService" class="com.Gary.service.UserService"> <property name="userDao" ref="userDao">property> bean> <bean name="userDao" class="com.Gary.dao.UserDao"> <property name="sessionFactory" ref="sessionFactory">property> bean> beans>applicationContext.xml
在web.xml中扩大Session范围,使Session作用于从页面发起请求一直到页面的关闭
<filter> <filter-name>openSessionfilter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilterfilter-class> filter> <filter-mapping> <filter-name>openSessionfilter-name> <url-pattern>/*url-pattern> filter-mapping>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Springdisplay-name> <welcome-file-list> <welcome-file>index.htmlwelcome-file> <welcome-file>index.htmwelcome-file> <welcome-file>index.jspwelcome-file> <welcome-file>default.htmlwelcome-file> <welcome-file>default.htmwelcome-file> <welcome-file>default.jspwelcome-file> welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> listener> <context-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:applicationContext.xmlparam-value> context-param> <filter> <filter-name>openSessionfilter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilterfilter-class> filter> <filter-mapping> <filter-name>openSessionfilter-name> <url-pattern>/*url-pattern> filter-mapping> <filter> <filter-name>strutsfilter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilterfilter-class> filter> <filter-mapping> <filter-name>strutsfilter-name> <url-pattern>/*url-pattern> filter-mapping> web-app>web.xml
JavaWeb_(Spring框架)在Struts+Hibernate框架中引入Spring框架
现在使用Spring框架整合Struts+Hibernate项目,运行项目
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="css/head.css" /> <link rel="stylesheet" type="text/css" href="css/login.css" /> head> <body> <div class="dvhead"> <div class="dvlogo"> <a href="index.html">你问我答a> div> <div class="dvsearch">10秒钟注册账号,找到你的同学div> <div class="dvreg"> 已有账号,立即 <a href="login.html">登录a> div> div> <section class="sec"> <form action="${pageContext.request.contextPath }/UserAction_login" method="post"> <div class="register-box"> <label for="username" class="username_label"> 用 户 名 <input maxlength="20" name="username" type="text" placeholder="您的用户名和登录名" /> label> <div class="tips">div> div> <div class="register-box"> <label for="username" class="other_label"> 密 码 <input maxlength="20" type="password" name="password" placeholder="建议至少使用两种字符组合" /> label> <div class="tips">div> div> <div class="arguement"> <input type="checkbox" id="xieyi" /> 阅读并同意 <a href="javascript:void(0)">《你问我答用户注册协议》a> <a href="register.html">没有账号,立即注册a> <div class="tips" style="color: red" > <s:property value="#error"/> div> div> <div class="submit_btn"> <button type="submit" id="submit_btn">立 即 登录button> div> form> section> <script src="js/index.js" type="text/javascript" charset="utf-8">script> body>login.jsp
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Springdisplay-name> <welcome-file-list> <welcome-file>index.htmlwelcome-file> <welcome-file>index.htmwelcome-file> <welcome-file>index.jspwelcome-file> <welcome-file>default.htmlwelcome-file> <welcome-file>default.htmwelcome-file> <welcome-file>default.jspwelcome-file> welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> listener> <context-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:applicationContext.xmlparam-value> context-param> <filter> <filter-name>openSessionfilter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilterfilter-class> filter> <filter-mapping> <filter-name>openSessionfilter-name> <url-pattern>/*url-pattern> filter-mapping> <filter> <filter-name>strutsfilter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilterfilter-class> filter> <filter-mapping> <filter-name>strutsfilter-name> <url-pattern>/*url-pattern> filter-mapping> web-app>web.xml
com.Gary.dao
package com.Gary.dao; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.NativeQuery; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import com.Gary.domain.User; import com.Gary.utils.HibernateUtils; public class UserDao extends HibernateDaoSupport{ public User findUser(User user) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //Dao层控制事务 做法是非常不好的 //Session session = HibernateUtils.getCurrentSession(); //sql操作数据库 String sql = "select * from user where username = ? and password = ?"; NativeQuery sqlQuery = session.createSQLQuery(sql); sqlQuery.addEntity(User.class); sqlQuery.setParameter(1, user.getUsername()); sqlQuery.setParameter(2, user.getPassword()); User result = (User) sqlQuery.uniqueResult(); return result; } }UserDao.java
com.Gary.domain
package com.Gary.domain; public class User { private String id; private String username; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } 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; } }User.java
<?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 package="com.Gary.domain"> <class name="User" table="user"> <id name="id"> <generator class="uuid">generator> id> <property name="username" column="username">property> <property name="password" column="password">property> class> hibernate-mapping>User.hbm.xml
com.Gary.service
package com.Gary.service; import javax.annotation.Resource; import org.hibernate.Transaction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.Gary.dao.UserDao; import com.Gary.domain.User; import com.Gary.utils.HibernateUtils; public class UserService { private UserDao userDao; public boolean findUser(User user) { //Transaction beginTransaction = HibernateUtils.getCurrentSession().beginTransaction(); User temp = null; try { temp = userDao.findUser(user); }catch(Exception e){ //beginTransaction.rollback(); } //beginTransaction.commit(); //System.out.println("UserService"+temp); return temp==null?false:true; } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } }UserService.java
com.Gary.utils
package com.Gary.utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory sessionFactory = null; static { Configuration config = new Configuration().configure(); sessionFactory = config.buildSessionFactory(); } public static Session getSession() { return sessionFactory.openSession(); } public static Session getCurrentSession() { return sessionFactory.getCurrentSession(); } }HibernateUtils.java
com.Gary.web
package com.Gary.web; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.Gary.domain.User; import com.Gary.service.UserService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDrivenUserAction.java{ public User user = new User(); private UserService userService; public String login() throws Exception { boolean success = userService.findUser(user); //System.out.println("UserService"+user.getUsername()+user.getPassword()); if(success) { return "toIndex"; }else { ActionContext.getContext().put("error", "用户名或者密码错误!!"); return "login"; } } @Override public User getModel() { return user; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } }
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:component-scan base-package="com.Gary">context:component-scan> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="jdbc:mysql:///spring">property> <property name="driverClass" value="com.mysql.jdbc.Driver">property> <property name="user" value="root">property> <property name="password" value="123456">property> bean> <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource">property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectprop> <prop key="hibernate.show_sql">trueprop> <prop key="hibernate.format_sql">trueprop> <prop key="hibernate.hbm2ddl.auto">updateprop> props> property> <property name="mappingDirectoryLocations" value="classpath:com/Gary/domain">property> bean> <bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory">property> bean> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" /> tx:attributes> tx:advice> <aop:config> <aop:pointcut expression="execution(* com.Gary.service.*.*(..))" id="pc" /> <aop:advisor advice-ref="advice" pointcut-ref="pc" /> aop:config> <bean name = "userAction" class="com.Gary.web.UserAction" scope="prototype"> <property name="userService" ref="userService">property> bean> <bean name="userService" class="com.Gary.service.UserService"> <property name="userDao" ref="userDao">property> bean> <bean name="userDao" class="com.Gary.dao.UserDao"> <property name="sessionFactory" ref="sessionFactory">property> bean> beans>applicationContext.xml
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> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty> <property name="hibernate.connection.url">jdbc:mysql:///springproperty> <property name="hibernate.connection.username">rootproperty> <property name="hibernate.connecton.password">123456property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty> <property name="hibernate.show_sql">trueproperty> <property name="hibernate.format_sql">trueproperty> <property name="hibernate.hbm2ddl.auto">updateproperty> <property name="hibernate.connection.isolation">4property> <property name="hibernate.current_session_context_class">threadproperty> <mapping resource="com/Gary/domain/User.hbm.xml"/> session-factory> hibernate-configuration>hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true">constant> <constant name="struts.enable.DynamicMethodInvocation" value="true">constant> <constant name="struts.objectFactory" value="spring">constant> <package name="spring" namespace="/" extends="struts-default"> <global-allowed-methods>regex:.*global-allowed-methods> <action name="UserAction_*" class="com.Gary.web.UserAction" method="{1}"> <result name="login">/login.jspresult> <result name="toIndex" type="redirect">/index.htmlresult> action> package> struts>struts.xml