第30章 J2EE SSH基础学习-SSH整合初步



 3 没有Spring参与到系统存在主要问题
   a:需要构建大量的service和dao的实例,成本高昂,抗压能力不足,JVM压力大。
   b.存在着一定程度上的层泄露问题(layer leakage)
   c 方法代码存在大量冗余,需要消除,Spring通过AOP技术解决了这个问题
   d 事务不支持,系统不完整
   
   
 4 spring 历史
  EJB(Enterprise Javabean)=普通的javabean+四个接口实现
  state bean,Message-driven-bean ,entity bean
  
 5 spring 的启动
  spring有一个超级对象缓存池(上下文容器context container),当应用程序启动的时候,这个缓存池就会自动启动

  

spring课程需要导入spring基础包。这个网上可以下载。

然后我们在原来的Struts+Hibernate基础上。在添加spring元素进入。

spring基础配置文件步骤:

第一步:导入spring.jar包最好是配套的。或者分开导入也可以,但是需要与struts配套的spring-struts-pluging.jar包。这个是将struts.xml中的属性可以使用spring生成的bean方案。

第二部:配置web.xml文件:添加上下文参数(也就是容器)以及监听器。这是启动spring的入口点。

  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath*:edu/fjnu/training/config/*.xml</param-value>
  </context-param>
  	
	<!-- 该监听器主要监听应用程序启动事件,只要应用程序启动,他就开始启动读取spring配置文件 -->
<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
</listener>
	

第三部:

配置配置spring文件:

 a  数据源dataSource

 b sessionFactory

 c bean对象。

扫描二维码关注公众号,回复: 1436997 查看本文章
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" [
<!ENTITY contextInclude SYSTEM "org/springframework/web/portlet/context/WEB-INF/contextInclude.xml">
]>

<beans>
	<!-- Spring提供了一个数据源,类似连接池的功能 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
		<property name="username" value="tester"></property>
		<property name="password" value="123456"></property>
	</bean>
	
	<!-- hibernate session factory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource"/>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
			</props> 
		</property>
		<property name="mappingResources">
			<list>
				<value>edu/fjnu/training/domain/User.hbm.xml</value>
				<value>edu/fjnu/training/domain/Student.hbm.xml</value>
				<value>edu/fjnu/training/domain/Clazz.hbm.xml</value>
			 
			</list>
		</property>
		
	</bean>
	
	<!-- ====================================== -->
	<!-- ClazzAction对象 -->
	<bean id="clazzAction" class="edu.fjnu.training.action.ClazzAction" scope="prototype">
		<property name="clazzService" ref="clazzService"></property>
	</bean>
	
	<!-- ClazzService对象 -->
	<bean id="clazzService" class="edu.fjnu.training.service.ClazzServiceImpl">
		<property name="clazzDao" ref="clazzDao"></property>
	</bean>
	
	<!-- ClazzDao对象 -->
	<bean id="clazzDao" class="edu.fjnu.training.dao.ClazzDaoHibernateImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!-- ====================================== -->
	<!-- 安全登录SecurityAction对象 scope="prototype" 表示这个Action-->
	<bean id="securityAction" class="edu.fjnu.training.action.SecurityAction" scope="prototype">
		<property name="userService" ref="userService"></property>
	</bean>
	
	<!-- UserService对象服务 -->
	<bean id="userService" class="edu.fjnu.training.service.UserServiceImpl"> 
		<property name="userDao" ref="userDao"></property>
	</bean>
	
	<!-- UserDao对象 -->
	<bean id="userDao" class="edu.fjnu.training.dao.UserDaoHibernateImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!-- ====================================== -->
	
	<bean id="studentAction" class="edu.fjnu.training.action.StudentAction">
		<property name="studentService" ref="studentService"></property>
		<property name="clazzService" ref="clazzService"></property>
	</bean>
	 
	<bean id="studentService" class="edu.fjnu.training.service.StudentServiceImpl">
		<property name="studentDao" ref="studentDao"></property>
		<property name="clazzDao" ref="clazzDao"></property>
	</bean>
	<bean id="studentDao" class="edu.fjnu.training.dao.StudentDaoHibernateImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
</beans>

第五部:修改dao层代码:需要继承HibernateDaoSupport类。然后实现的话,代码如下:

UserDaoHibernateImpl.java

/**
 * 工  程   名:SMS-SSH-20180524	<br>
 * 文  件   名:UserDaoHibernateImpl.java	<br>
 * 工具包名:edu.fjnu.training.dao	<br>
 * 功能描述:TODO	<br>
 * 创建时间:2018年5月26日 下午7:25:47	<br>
 * 版本信息:V1.0
 * @创建人:Zhou Kailun	
 */
package edu.fjnu.training.dao;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.TransactionException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import edu.fjnu.training.domain.User;
import edu.fjnu.training.exception.DataAccessException;
import edu.fjnu.training.utils.HibernateUtils;

/**
 * 类名:UserDaoHibernateImpl	<br>
 * 功能描述:	<br> 
 * 创建日期:2018年5月26日 下午7:25:47	<br>
 * 修改备注:
 * @作者信息:Zhou kailun	<br>
 */
public class UserDaoHibernateImpl extends HibernateDaoSupport implements UserDao {

	/**<p>构造函数:</p><br><br>
	 * <p>描述:</p><br> 
	 */
	public UserDaoHibernateImpl() {
		// TODO Auto-generated constructor stub
	}

	/* (非 Javadoc)
	 * <p>Title:getUserByNo</p>
	 * <p>描       述:</p>
	 * @param userNo
	 * @return
	 * @see edu.fjnu.training.dao.UserDao#getUserByNo(java.lang.String)
	 */
	@Override
	public User getUserByNo(String userNo) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		trans=session.beginTransaction();
//		User user=null;
//		try{
//			user=(User)session.get(User.class, userNo);
//			trans.commit();
//		}catch(TransactionException e){
//			e.printStackTrace(); 
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
//		if(user==null)
//			throw new DataAccessException("账号不存在");
//		return user;
		return (User)this.getHibernateTemplate().get(User.class, userNo);
	}

	@Override
	public void delUser(String userNo) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		trans=session.beginTransaction();
//	 
//		try{
//			session.delete(userNo);
//			trans.commit();
//		}catch(TransactionException e){
//			e.printStackTrace();
//			trans.rollback();
//		} 
		User user=(User)this.getHibernateTemplate().load(User.class, userNo);
		this.getHibernateTemplate().delete(user);
	}

}

UserServiceImpl.java

/**
 * 工  程   名:SMS-20180522	<br>
 * 文  件   名:UserServiceJDBCImpl.java	<br>
 * 工具包名:edu.fjnu.training.service	<br>
 * 功能描述:TODO	<br>
 * 创建时间:2018年5月22日 下午8:06:53	<br>
 * 版本信息:V1.0
 * @创建人:周开伦	
 */
package edu.fjnu.training.service;

import edu.fjnu.training.dao.UserDao;
import edu.fjnu.training.dao.UserDaoHibernateImpl;
import edu.fjnu.training.dao.UserDaoJDBCImpl;
import edu.fjnu.training.domain.User;
import edu.fjnu.training.exception.SMSException;

/**
 * 类名:UserServiceJDBCImpl	<br>
 * 功能描述:	<br> 
 * 创建日期:2018年5月22日 下午8:06:53	<br>
 * 修改备注:
 * @作者信息:Zhou kailun	<br>
 */
public class UserServiceImpl implements UserService {
	/**UserDao实例*/
	private UserDao userDao;
	/* (非 Javadoc)
	 * <p>Title:checkUser</p>
	 * <p>描       述:</p>
	 * @param userNo
	 * @param userPwd
	 * @return
	 * @see edu.fjnu.training.service.UserService#checkUser(java.lang.String, java.lang.String)
	 */
	@Override
	public User checkUser(String userNo, String userPwd) {
//		UserDao userDao=new UserDaoHibernateImpl();
		User user=userDao.getUserByNo(userNo);
		
		//校验密码
		if(userPwd.equals(user.getUserPwd())!=true){
			throw new SMSException("密码不正确,请检查");
		}
		return user;
	}
	public UserDao getUserDao() {
		return userDao;
	}
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	

}

SecurityeSAction.java

/**
 * 工  程   名:SMS-SSH-20180524	<br>
 * 文  件   名:UserAction.java	<br>
 * 工具包名:edu.fjnu.training.action	<br>
 * 功能描述:TODO	<br>
 * 创建时间:2018年5月25日 下午2:01:01	<br>
 * 版本信息:V1.0
 * @创建人:Zhou Kailun	
 */
package edu.fjnu.training.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import edu.fjnu.training.domain.User;
import edu.fjnu.training.exception.SMSException;
import edu.fjnu.training.service.UserService;
import edu.fjnu.training.service.UserServiceImpl; 
/**
 * 类名:SecurityAction	<br>
 * 功能描述:	<br> 
 * 创建日期:2018年5月25日 下午2:01:01	<br>
 * 修改备注:
 * @作者信息:Zhou kailun	<br>
 */
public class SecurityAction extends BaseAction implements SessionAware{
	/**UserService实例*/
	private UserService userService;
	/**登录用户信息:User对象*/
	private User user;
	/**获得全文Session范围:这种做法叫做注入依赖,也叫反转依赖*/
	Map<String, Object> session=null;
	
	public String toLogin()throws Exception{
		return "login_page";
	}
	
	public String login()throws Exception{
//		UserService userService=new UserServiceImpl();
		try{
			user=userService.checkUser(user.getUserNo(), user.getUserPwd());
		}catch(SMSException e ){
			this.addActionError(e.getMessage());
			return "login_page";
		}
		session.put("loginedUser", user);
		return "mainAction";
	}
	public String logout() throws Exception{
		session.remove("loginedUser");
		return "toLoginAction";
	}
	public String main()throws Exception{
		return "main_page";
	}
	/**<p>构造函数:</p><br><br>
	 * <p>描述:</p><br> 
	 */
	public SecurityAction() {
		// TODO Auto-generated constructor stub
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@Override
	public void setSession(Map<String, Object> session) {
		 
		this.session=session;
	}

	public UserService getUserService() {
		return userService;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	} 
}

struts.xml添加如下两个属性:

<!-- 告诉struts对象生成策略是由spring生成。并且是根据名字生成策 -->
 <constant name="struts.objectFactory" value="spring" />
 <constant name="struts.objectFactory.spring.autoWire" value="name" />

对应的Struts-user.xml配置文件中变化如下:需要将action中的class=“edu.fjnu.cse......UserAction”改为:class="userAction".

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
        "http://struts.apache.org/dtds/struts-2.1.7.dtd">


<struts> 
	<package name="securityPkg" namespace="/security" extends="smsPkg" >
		
		<action name="*" class="edu.fjnu.training.action.SecurityAction" method="{1}">
			<result name="login_page" >../jsps/security/login.jsp</result>
			<result name="mainAction" type="redirectAction">main</result>
			<result name="main_page" >../jsps/main.jsp</result>
			<result name="toLoginAction" type="redirectAction">toLogin</result>
			<interceptor-ref name="guess"></interceptor-ref>
		</action>  
	</package>
	 
</struts>

然后看一下ClazzDaoHibernateImpl.java的实现

/**
 * @Title: ClazzDaoHibernateImpl.java
 * @package: edu.fjnu.training.dao
 * @author: Zhou kailun
 * @date: 2018年5月30日 下午7:54:26
 * @version: V1.0
 */
package edu.fjnu.training.dao;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import edu.fjnu.training.domain.Clazz;
import edu.fjnu.training.utils.HibernateUtils;

/** 
 * ClassName: ClazzDaoHibernateImpl
 * Description: TODO
 * Author: Zhou kailun 
 *
 */
public class ClazzDaoHibernateImpl extends HibernateDaoSupport implements ClazzDao {

	/**
	 * <p>Title: </p>
	 * <p>Description: </p>
	 */
	public ClazzDaoHibernateImpl() {
		// TODO Auto-generated constructor stub
	}

	/* (non-Javadoc)
	 * <p>Title: addClazz </p>
	 * <p>Description: </p>
	 * @param clazz
	 * @see edu.fjnu.training.dao.ClazzDao#addClazz(edu.fjnu.training.domain.Clazz)
	 */
	@Override
	public void addClazz(Clazz clazz) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		
//		try{
//			trans=session.beginTransaction();
//			
//			session.save(clazz);
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
		//spring 后只需要这一行
		this.getHibernateTemplate().save(clazz);
		
	}

	/* (non-Javadoc)
	 * <p>Title: listClazz </p>
	 * <p>Description: </p>
	 * @return
	 * @see edu.fjnu.training.dao.ClazzDao#listClazz()
	 */
	@Override
	public List<Clazz> listClazz() {
		String hql="from Clazz c order by c.clazzNo";
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		List<Clazz> clazzList=null;
//		
//		try{
//			
//			clazzList=session.createQuery(hql).list();
//			trans=session.beginTransaction();
//			 
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
//		
//		return clazzList;
		
		return this.getHibernateTemplate().find(hql);
	}

	@Override
	public void updateClazz(Clazz clazz) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		
//		try{
//			trans=session.beginTransaction();
//			
//			session.saveOrUpdate(clazz);
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
		this.getHibernateTemplate().update(clazz);
	}

	@Override
	public Clazz loadClazzByNo(Integer clazzNo) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		Clazz clazz=null;
//		try{
//			trans=session.beginTransaction();
//			try{ 
//				clazz=(Clazz)session.get(Clazz.class,clazzNo);
//			}catch(Exception e){}
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
//		return clazz;
		return (Clazz)this.getHibernateTemplate().get(Clazz.class, clazzNo);
	}

}

StudentDaoHibernateImpl.java

/**
 * 工  程   名:SMS-SSH-20180524	<br>
 * 文  件   名:StudentDaoHibernateImpl.java	<br>
 * 工具包名:edu.fjnu.training.dao	<br>
 * 功能描述:TODO	<br>
 * 创建时间:2018年5月26日 下午8:28:07	<br>
 * 版本信息:V1.0
 * @创建人:Zhou Kailun	
 */
package edu.fjnu.training.dao;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import edu.fjnu.training.domain.Student;
import edu.fjnu.training.service.StudentQueryHelper;
import edu.fjnu.training.utils.HibernateUtils;

/**
 * 类名:StudentDaoHibernateImpl	<br>
 * 功能描述:	<br> 
 * 创建日期:2018年5月26日 下午8:28:07	<br>
 * 修改备注:
 * @作者信息:Zhou kailun	<br>
 */
public class StudentDaoHibernateImpl extends HibernateDaoSupport implements StudentDao {

	/**<p>构造函数:</p><br><br>
	 * <p>描述:</p><br> 
	 */
	public StudentDaoHibernateImpl() {
		// TODO Auto-generated constructor stub
	}

	/* (非 Javadoc)
	 * <p>Title:addStudent</p>
	 * <p>描       述:</p>
	 * @param stu
	 * @see edu.fjnu.training.dao.StudentDao#addStudent(edu.fjnu.training.domain.Student)
	 */
	@Override
	public void addStudent(Student stu) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		trans=session.beginTransaction();;
//		try{
//			session.saveOrUpdate(stu);
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
	this.getHibernateTemplate().save(stu);
	}

	/* (非 Javadoc)
	 * <p>Title:removeStudent</p>
	 * <p>描       述:</p>
	 * @param stuNo
	 * @see edu.fjnu.training.dao.StudentDao#removeStudent(java.lang.String)
	 */
	@Override
	public void removeStudent(String stuNo) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		trans=session.beginTransaction();;
//		try{
//			Student stu=(Student)session.load(Student.class, stuNo);
//			
//			session.delete(stu);
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
		
		Student stu = (Student)this.getHibernateTemplate().load(Student.class, stuNo);
		this.getHibernateTemplate().delete(stu);
	}

	/* (非 Javadoc)
	 * <p>Title:loadAllStudent</p>
	 * <p>描       述:</p>
	 * @return
	 * @see edu.fjnu.training.dao.StudentDao#loadAllStudent()
	 */
	@Override
	public List<Student> loadAllStudent() {
		String hql="from Student s order by s.stuNo desc";//查询语句
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		List<Student> stuList=null;
//		
//		trans=session.beginTransaction(); 
//		try{
//			
//			stuList=session.createQuery(hql).list(); 
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
//		return stuList;
		return this.getHibernateTemplate().find(hql);
	}

	/* (非 Javadoc)
	 * <p>Title:getStudentByStuNo</p>
	 * <p>描       述:</p>
	 * @param stuNo
	 * @return
	 * @see edu.fjnu.training.dao.StudentDao#getStudentByStuNo(java.lang.String)
	 */
	@Override
	public Student getStudentByStuNo(String stuNo) {
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null;
//		Student stu=null;
//		
//		trans=session.beginTransaction(); 
//		try{
//			stu=(Student)session.get(Student.class, stuNo);
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		}
//		return stu;
		return (Student)this.getHibernateTemplate().get(Student.class, stuNo);
	}

	/* (非 Javadoc)
	 * <p>Title:updateStudent</p>
	 * <p>描       述:</p>
	 * @param stu
	 * @see edu.fjnu.training.dao.StudentDao#updateStudent(edu.fjnu.training.domain.Student)
	 */
	@Override
	public void updateStudent(Student stu) {
		if(stu.getStuPic()==null || stu.getStuPic().length==0){
			stu.setStuPic(this.loadStuPicByNo(stu.getStuNo()));
		}
//		
//		Session session=HibernateUtils.createSession();
//		Transaction trans=null; 
//		
//		trans=session.beginTransaction(); 
//		try{ 
//			session.saveOrUpdate(stu);;
//			trans.commit();
//		}catch(HibernateException e){
//			e.printStackTrace();
//			trans.rollback();
//		}finally{
//			if(session.isOpen()){
//				session.close();
//			}
//		} 
		this.getHibernateTemplate().update(stu);

	}

	/* (非 Javadoc)
	 * <p>Title:loadStuPicByNo</p>
	 * <p>描       述:</p>
	 * @param stuNo
	 * @return
	 * @see edu.fjnu.training.dao.StudentDao#loadStuPicByNo(java.lang.String)
	 */
	@Override
	public byte[] loadStuPicByNo(String stuNo) {
		return this.getStudentByStuNo(stuNo).getStuPic();
	}

	@Override
	public List<Student> loadStudents(StudentQueryHelper helper) {
		DetachedCriteria criteria=this.genCriteriaByHelper(helper);
//		Session session=HibernateUtils.createSession();
		Session session=this.getSession();
		Transaction trans=null;
		List<Student> stuList=null;
		
		trans=session.beginTransaction();
		try{
			criteria.addOrder(Order.asc("stuNo"));
			stuList=criteria.getExecutableCriteria(session).list();
			trans.commit();
		}catch(HibernateException e){
			e.printStackTrace();
			trans.rollback();
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
		return stuList;
	}
	/**
	 * Title:获得(生成)DetachedCriteria对象(条件分离对象) <br>
	 * Description:根据传入的Helper生成DetachedCriteria对象<br>
	 * @param helper 查询条件 
	 * @return DetachedCriteria 条件分离对象
	 * @throws
	 */
	private DetachedCriteria genCriteriaByHelper(StudentQueryHelper helper){
		DetachedCriteria criteria=DetachedCriteria.forClass(Student.class);
		if(StringUtils.isNotEmpty(helper.getQryStuNo())){
			criteria.add(Restrictions.eq("stuNo", helper.getQryStuNo()));
		}
		if(StringUtils.isNotEmpty(helper.getQryStuName())){
			criteria.add(Restrictions.like("stuName","%"+helper.getQryStuName()+"%"));
		}
		if(helper.getQryMinStuMark()!=null){
			criteria.add(Restrictions.ge("stuMark", helper.getQryMinStuMark()));
		}
		if(helper.getQryMaxStuMark()!=null){
			criteria.add(Restrictions.le("stuMark", helper.getQryMaxStuMark()));
		}
		if(StringUtils.isNotEmpty(helper.getQryStuSex())){
			criteria.add(Restrictions.eq("stuSex", helper.getQryStuSex()));
		}
		if(StringUtils.isNotEmpty(helper.getQryStuOrigin())){
			criteria.add(Restrictions.eq("stuOrigin", helper.getQryStuOrigin()));
		}
		if(helper.getQryClazzNo()!=null){
			criteria.createCriteria("clazz").add(Restrictions.eq("clazzNo", helper.getQryClazzNo()));
		}
		return criteria;
	}
	@Override
	public Long cntStudentsByHelper(StudentQueryHelper helper) {
		DetachedCriteria detachedCriteria=this.genCriteriaByHelper(helper);
		//增加投影运算。就是我要做的事情类型
		detachedCriteria.setProjection(Projections.rowCount());
		long cnt=0;
		
//		Session session=HibernateUtils.createSession();
		Session session=this.getSession();
		
		Transaction trans = session.beginTransaction();
		try{
			cnt = Long.parseLong(detachedCriteria.getExecutableCriteria(session).list().get(0).toString());
			trans.commit();	
		}catch(HibernateException e){
			e.printStackTrace();
			trans.rollback();
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
		
		return cnt;
	}

	@Override
	public List<Student> loadScopeStudentsByHelper(StudentQueryHelper helper,int beginIndex,int fetchSize) {
		DetachedCriteria detachedCriteria = this.genCriteriaByHelper(helper);
		detachedCriteria.addOrder(Order.asc("stuNo"));
		List<Student> stuList = null;
		
//		Session session = HibernateUtils.createSession();
		Session session=this.getSession();
		Transaction trans = session.beginTransaction();
		try{
			stuList = detachedCriteria.getExecutableCriteria(session)
	                .setFirstResult(beginIndex)
	                .setMaxResults(fetchSize)
	                .list();
			trans.commit();
		}catch(HibernateException e)
		{
			e.printStackTrace();
			trans.rollback();
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
		return stuList;
	}

}

其余的基本一样

后面再讲事务这个内容

 

猜你喜欢

转载自blog.csdn.net/qq_36346496/article/details/80530662