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>