(13)spring4_ssh整合(struts2和hibernate5)

1.导入struts-2.3.36-all\struts-2.3.36\apps\struts2-blank-2.3.36\WEB-INF\lib中的包以及struts2-spring-plugin-2.3.36

2.配置struts.xml

<struts>
<constant name="struts.action.extension" value="action,do"/><!-- 设置后缀 -->
<constant name="struts.objectFactory" value="spring" /><!--被spring管理,action由spring管理,可以使用spring的依赖注入 -->
    <package name="default" namespace="/" extends="struts-default">
       <action name="*_*" class="{1}Action" method="{2}">
        <result>/WEB-INF/jsp/{1}/{2}.jsp</result>
         <result name="input">/WEB-INF/jsp/{1}/{2}Input.jsp</result>
        <result name="redirect" type="redirect">${url}</result>
 </action>
    </package>
</struts>

注意:(1).class使用的不是类,是@Controller("groupAction")中的groupAction

(2).注意小写,因为在groupAction,group是小写,所以是group_list而不是Group_list

GroupAction:

@Controller("groupAction")
@Scope("prototype")//action必须使用多例
public class GroupAction extends ActionSupport implements ModelDriven<Group>{

/**
	 * 
	 */
	private static final long serialVersionUID = 9035927090402972047L;
private IGroupService groupService;
private Group group;
private int cid;//接收网页过来的参数




public int getCid() {
	return cid;
}


public void setCid(int cid) {
	this.cid = cid;
}


public Group getGroup() {
	return group;
}


public void setGroup(Group group) {
	this.group = group;
}


public IGroupService getGroupService() {
	return groupService;
}


@Resource
public void setGroupService(IGroupService groupService) {
	this.groupService = groupService;
}


public String list() {
	System.out.println("list");
	ActionContext.getContext().put("gl", groupService.listAllGroup());
	return SUCCESS;
}

public String show() {
	System.out.println(cid);
	group=groupService.load(cid);
	System.out.println(group);
	return SUCCESS;
}


@Override
public Group getModel() {
	// TODO 自动生成的方法存根
	if(group==null) group=new Group();
	return group;
}

}

BaseDao:

public class BaseDao<T> extends HibernateDaoSupport implements IBaseDao<T>{

	private Class<T> clz;
	
	
	
	@SuppressWarnings("unchecked")
	public Class<T> getClz() {
		if(clz==null) {
			clz = ((Class<T>)
					(((ParameterizedType)(this.getClass().getGenericSuperclass())).getActualTypeArguments()[0]));
		}
		return clz;
	}

	public void setClz(Class<T> clz) {
		this.clz = clz;
	}

	@Resource(name="sessionFactory")
	public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
	}

@Override
public void add(T t) {
	// TODO 自动生成的方法存根
	this.getHibernateTemplate().save(t);
}

@Override
public void delete(int id) {
	// TODO 自动生成的方法存根
	this.getHibernateTemplate().delete(this.load(id));
}

@Override
public void update(T t) {
	// TODO 自动生成的方法存根
	this.getHibernateTemplate().update(t);
}

@Override
public T load(int id) {
	// TODO 自动生成的方法存根
	return this.getHibernateTemplate().load(getClz(), id);
}

@Override
public List<T> list(String sql) {
	// TODO 自动生成的方法存根
	return list(sql, null);
}

@Override
public List<T> list(String sql, Object[] args) {
	// TODO 自动生成的方法存根
@SuppressWarnings("unchecked")
Query<T> q=this.getSessionFactory().getCurrentSession().createQuery(sql);
if(args!=null) {//参数不为空才取长度,才遍历
	for(int i=0;i<args.length;i++) {
		q.setParameter(i, args[i]);
	}
}
List<T> list=q.list();
return list;
}
@Override
public List<T> list(String sql, Object args) {
	// TODO 自动生成的方法存根
	return list(sql, new Object[] {args});
}
}

注意:(1).if(args!=null) {}//参数不为空才取长度,才遍历
    (2).return list(sql, null); 里面传入null,所以我们需要进行判断,不为空再取数据

GroupHibernateDao.:

@Repository("groupHibernateDao")
public class GroupHibernateDao extends BaseDao<Group> implements IGroupDao {

}

GroupService:

@Service("groupService")
public class GroupService implements IGroupService {
private IGroupDao groupHibernateDao;




	public IGroupDao getGroupHibernateDao() {
	return groupHibernateDao;
}
@Resource
public void setGroupHibernateDao(IGroupDao groupHibernateDao) {
	this.groupHibernateDao = groupHibernateDao;
}


	
	@Override
	public Group load(int id) {
		// TODO 自动生成的方法存根
		return groupHibernateDao.load(id);
	}

	@Override
	public List<Group> listAllGroup() {
		// TODO 自动生成的方法存根
return groupHibernateDao.list("from Group");
	}

}

beans.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: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">

    <!-- 打开Spring的Annotation支持 -->
	<context:annotation-config />
	<!-- 设定Spring 去哪些包中找Annotation -->
	<context:component-scan base-package="spring" />

    <!--Spring +Hibernate整合 -->
    <!--加载数据库的连接配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据库来连接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <!--驱动类全称 -->
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <!--数据库的url地址 -->
        <property name="url" value="${jdbc.url}" />
        <!--用户名 -->
        <property name="username" value="${jdbc.username}" />
        <!--密码 -->
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!--配置Hibernate的SessionFactory  -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <!--1、配置数据库连接池  -->
    <property name="dataSource" ref="dataSource"></property>
    <property name="packagesToScan">
			<value>spring.model</value>
		</property>
    <!--2、Hibernate的配置信息  -->
    <property name="hibernateProperties">
    <props>
    <!--方言  -->
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    </props>
    </property>
    </bean>

<!--事物管理对象 -->
    <bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    
     <!-- <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean> -->
    
<!--配置事物的通知  -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <!-- 事物的属性,其实就是为切面中的哪些方法进行事物的配置 -->
        <tx:attributes>
        <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <!--aop配置信息  -->
    <aop:config>
        <aop:pointcut id="pcut" expression="execution(* spring.dao.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pcut"/>
    </aop:config>
</beans>

注意:(1).导入配置文件的location应该使用classpath:jdbc.properties

web.xml:

<?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" version="3.1">
  
 <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener><!-- 创建监听器 -->
  
  <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath*:beans.xml</param-value>
 </context-param>
 <filter>
 <filter-name>OpenSessionInViewFilter</filter-name>
 <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
 </filter-mapping><!-- 创建OpenSessionInViewFilter -->
 <!-- OpenSessionInViewFilter允许这个request使用的是一个session,可以在request的任何时期延迟加载数据 -->
 <!-- 要想该过滤器起作用,必须设置在struts2过滤器之前 -->
 <filter>
 <filter-name>struts2</filter-name>
 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
 </filter-mapping><!-- 创建struts过滤器 -->
 
</web-app>

list.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:iterator value="#gl"><!-- 取ActionContext中的数据需要# -->
${id }----<a href="group_show.action?cid=${id }">${name }</a>
<br>
</s:iterator>
</body>
</html>

show.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>组信息</title>
</head>
<body>
<h1>组名称:${group.name }</h1><!-- 在action中有group这个参数(用来把数据从action传到页面) -->
</body>
</html>

猜你喜欢

转载自blog.csdn.net/HZPHYT/article/details/84342922