三大框架整合struts+spring+hibernate
action層
package com.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.DELETE;
import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.po.Page;
import com.po.User;
import com.service.IUserService;
@Controller
public class UserAction implements ModelDriven<User>, ServletRequestAware,
ServletResponseAware {
@Autowired
private IUserService userService;
// 使用模型驅動自動獲取前臺頁面的值
private User user;
@Override
public User getModel() {
if(user==null){
user=new User();
}
return user;
}
// 獲取request和response物件
private HttpServletRequest request;
private HttpServletResponse response;
@Override
public void setServletResponse(HttpServletResponse arg0) {
this.response = arg0;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
}
public String add() {
userService.add(user);
return "add";
}
public String delete() {
userService.delete(user);
return "delete";
}
//修改完成之後,進入查詢所有action,顯示最新資料
public String update() {
userService.update(user);
return "update";
}
//根據id查詢物件
public String findById() {
User user2=userService.findById(user.getId());
ActionContext.getContext().getValueStack().push(user2);
return "findById";
}
//多條件模糊查詢
public String findByUser() {
//前臺傳遞的id屬性值,會自動被模型驅動獲取,所以直接使用user作為查詢條件
List<User> ulist = userService.findByUser(user);
request.setAttribute("user", user);
request.setAttribute("ulist", ulist);
return "findByUser";
}
//查詢所有使用者
public String findAll() {
List<User> ulist = userService.findAll();
request.setAttribute("ulist", ulist);
return "findAll";
}
//分頁查詢
public String findByPage() {
//分頁查詢需要提供三個引數:當前頁,每頁顯示的行數,總行數
Page page=new Page();
page.setSize(3);
Integer count=userService.findCount();
page.setCount(count);
//第一次進入,沒有當前頁,需要手動提供
String nowPage = request.getParameter("nowPage");
if(StringUtils.isBlank(nowPage)){
//如果從頁面中獲取的nowPage是空,說明是第一次進入,手動設定為1
nowPage="1";
}
page.setNowPage(Integer.parseInt(nowPage));
List<User> ulist = userService.findByPage(page);
request.setAttribute("ulist", ulist);
request.setAttribute("page", page);
return "findByPage";
}
//多條件分頁查詢
public String findByPU() {
//分頁查詢需要提供三個引數:當前頁,每頁顯示的行數,總行數
Page page=new Page();
page.setSize(3);
//查詢符合條件的所有資料
Integer count=userService.findCountByPU(user);
page.setCount(count);
//第一次進入,沒有當前頁,需要手動提供
String nowPage = request.getParameter("nowPage");
if(StringUtils.isBlank(nowPage)){
//如果從頁面中獲取的nowPage是空,說明是第一次進入,手動設定為1
nowPage="1";
}
page.setNowPage(Integer.parseInt(nowPage));
List<User> ulist = userService.findByPU(page, user);
request.setAttribute("ulist", ulist);
request.setAttribute("page", page);
request.setAttribute("user", user);
return "findByPU";
}
}
dao層
package com.dao.impl;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.dao.IUserDao;
import com.po.Page;
import com.po.User;
/**
* 使用spring提供的hibernate模板進行增刪改查,需要注入sessionFactory
* @author wesley
*
*/
@Repository
public class UserDaoImpl extends HibernateDaoSupport implements IUserDao {
//需要注入sessionfactory,使用任意set方法
@Resource(name="sessionFactory")
public void setDI(SessionFactory sf) {
this.setSessionFactory(sf);
}
@Override
public void add(User user) {
this.getHibernateTemplate().save(user);
}
@Override
public void delete(User user) {
this.getHibernateTemplate().delete(user);
}
@Override
public void update(User user) {
this.getHibernateTemplate().update(user);
}
@Override
public List<User> findAll() {
String hql="from User";
List<User> ulist = this.getHibernateTemplate().find(hql);
return ulist;
}
/*from User where 1=1
and id=?
and name=?
and pass=?*/
@Override
public List<User> findByUser(User user) {
StringBuffer bf=new StringBuffer();
bf.append("from User where 1=1");
if(user.getId()!=null){
bf.append(" and id="+user.getId());
}
if(StringUtils.isNotBlank(user.getName())){
bf.append(" and name like '%"+user.getName()+"%'");
}
if(StringUtils.isNotBlank(user.getPass())){
bf.append(" and pass like '%"+user.getPass()+"%'");
}
String ss = bf.toString();
List<User> ulist = this.getHibernateTemplate().find(ss);
return ulist;
}
@Override
public User findById(Integer id) {
// TODO Auto-generated method stub
return this.getHibernateTemplate().get(User.class, id);
}
//使用回撥session建立query
@Override
public List<User> findByPage(final Page page) {
/*SessionFactory sessionFactory = this.getHibernateTemplate().getSessionFactory();
Session session = sessionFactory.openSession();
String hql="from User ";
Query query = session.createQuery(hql);
query.setFirstResult(page.getIndex());//開始下標
query.setMaxResults(page.getSize());//每頁顯示的行數
List list = query.list();*/
List<User> ulist=this.getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql="from User ";
Query query = session.createQuery(hql);
//使用query的兩個方法進行分頁查詢
query.setFirstResult(page.getIndex());//開始下標
query.setMaxResults(page.getSize());//每頁顯示的行數
List<User> list = query.list();
return list;
}
});
return ulist;
}
@Override
public Integer findCount() {
String hql="from User";
return this.getHibernateTemplate().find(hql).size();
}
/*多條件分頁查詢*/
@Override
public List<User> findByPU(final Page page, User user) {
StringBuffer bf=new StringBuffer();
bf.append("from User where 1=1");
if(user.getId()!=null){
bf.append(" and id="+user.getId());
}
if(StringUtils.isNotBlank(user.getName())){
bf.append(" and name like '%"+user.getName()+"%'");
}
if(StringUtils.isNotBlank(user.getPass())){
bf.append(" and pass like '%"+user.getPass()+"%'");
}
final String ss = bf.toString();
List<User> ulist=this.getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(ss);
//使用query的兩個方法進行分頁查詢
query.setFirstResult(page.getIndex());//開始下標
query.setMaxResults(page.getSize());//每頁顯示的行數
List<User> list = query.list();
return list;
}
});
return ulist;
}
@Override
public Integer findCountByPU(User user) {
StringBuffer bf=new StringBuffer();
bf.append("from User where 1=1");
if(user.getId()!=null){
bf.append(" and id="+user.getId());
}
if(StringUtils.isNotBlank(user.getName())){
bf.append(" and name like '%"+user.getName()+"%'");
}
if(StringUtils.isNotBlank(user.getPass())){
bf.append(" and pass like '%"+user.getPass()+"%'");
}
String ss = bf.toString();
List<User> ulist = this.getHibernateTemplate().find(ss);
return ulist.size();
}
}
service層
package com.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dao.IUserDao;
import com.dao.impl.UserDaoImpl;
import com.po.Page;
import com.po.User;
import com.service.IUserService;
@Service
public class UserServiceImpl implements IUserService{
@Autowired
private IUserDao userDao;
@Override
public void add(User user) {
userDao.add(user);
}
@Override
public void delete(User user) {
userDao.delete(user);
}
@Override
public void update(User user) {
userDao.update(user);
}
@Override
public List<User> findAll() {
// TODO Auto-generated method stub
return userDao.findAll();
}
@Override
public List<User> findByUser(User user) {
// TODO Auto-generated method stub
return userDao.findByUser(user);
}
@Override
public User findById(Integer id) {
// TODO Auto-generated method stub
return userDao.findById(id);
}
@Override
public List<User> findByPage(Page page) {
// TODO Auto-generated method stub
return userDao.findByPage(page);
}
@Override
public Integer findCount() {
// TODO Auto-generated method stub
return userDao.findCount();
}
@Override
public List<User> findByPU(Page page, User user) {
// TODO Auto-generated method stub
return userDao.findByPU(page, user);
}
@Override
public Integer findCountByPU(User user) {
// TODO Auto-generated method stub
return userDao.findCountByPU(user);
}
}
struts.hbm.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 新增struts2請求字尾常量 -->
<!-- <constant name="struts.action.extension" value="action,do"></constant> -->
<!-- 當struts的配置檔案修改後,系統是否自動重新載入該檔案,預設值為false -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 新增常量:struts的action交給spring建立 -->
<constant name="struts.objectFactory" value="spring"></constant>
<package name="user" namespace="/" extends="struts-default">
<action name="userAction_*" class="userAction" method="{1}">
<result name="findAll">/findAll.jsp</result>
<result name="findByUser">/findAll.jsp</result>
<result name="findByPage">/findByPage.jsp</result>
<result name="findByPU">/findByPU.jsp</result>
<result name="findById">/update.jsp</result>
<result name="update" type="redirectAction">
<param name="actionName">userAction_findAll</param>
</result>
</action>
</package>
</struts>
beanx.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:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 掃描註解 -->
<context:component-scan base-package="com"></context:component-scan>
<!-- aop註解支援 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- 開啟事務註解驅動 -->
<tx:annotation-driven transaction-manager="tx"/>
<!-- spring建立sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 引用資料來源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 可選配置 -->
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="show_sql">true</prop>
<prop key="format_sql">false</prop>
</props>
</property>
<!-- 註冊hbm檔案 -->
<property name="mappingLocations">
<value>classpath:com/po/*.hbm.xml</value>
</property>
</bean>
<!-- 配置資料來源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///lykj0904"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!-- 配置事務管理器 -->
<bean id="tx"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 新增struts的啟動配置 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 新增spring的啟動配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring啟動的時候預設是到web-inf下找applicationContext.xml,如果路徑修改,需要在此配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>