边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(四)

了解Dao层的创建和HibernateSupportDao后,忘了要把Spring3.0的Jar包加进去lib文件夹里面,由于Spring3.0开始没有把所有需要有关联的Jar包跟功能整合包放在一起,所以我们需要一步一步的把Jar包加进去,首先先把Spring3.0必要的Jar包加进来,org.springframework.aop-3.0.0.RELEASE.jar、org.springframework.asm-3.0.0.RELEASE.jar、org.springframework.aspects-3.0.0.RELEASE.jar、org.springframework.beans-3.0.0.RELEASE.jar、org.springframework.context-3.0.0.RELEASE.jar、org.springframework.core-3.0.0.RELEASE.jar、org.springframework.expression-3.0.0.RELEASE.jar、org.springframework.jdbc-3.0.0.RELEASE.jar、org.springframework.orm-3.0.0.RELEASE.jar、org.springframework.transaction-3.0.0.RELEASE.jar 除了要上述包之外,还需要加入commons-collections-3.2.1.jar(对JDK的集合增强),commons-logging-1.1.1.jar,commons-logging-api-1.1.1.jar(日志记录),aopalliance.jar(aop切面jar.如果缺少会报错),jta-1.1.jar(Java事务),javassist-3.9.0.GA.jar(反编译.class文件快速动态生成类),把所有包都加入到lib后之前出现因为缺少包的错误信息就会消失,然后在applicationContext.xml文件中加入以下内容:

<context:annotation-config />
	<context:component-scan base-package="org.lxh" />
	<tx:annotation-driven transaction-manager="hibernateTransactionManager" />

<bean id="hibernateTransactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>


context:annotation-config:是把Spring的Annotation(JPA)进行自动解释,

context:component-scan base-package="org.lxh" : 是对包的扫描,如果已经写了这个标签的话上面的context:annotation-config是可以不用再写入

hibernateTransactionManager:是我们BasicSupportDao注解中Resource所指向的id;这里先解释下Spring中几种常用的注解:

@Repository用于标注数据访问组件,即DAO组件

@Service用于标注业务层组件,即Service层

@Controller用于标注控制层组件(如struts中的action)

@Component泛指组件,当组件不好归类的时候可以使用这个注解进行标注

@Resource根据指定的名称进行反射获取所指向的bean

@Autowired对类成员变量、方法及构造函数进行标注,完成自动装配的工作

@Repository、@Service、@Component、@Service一般放在class上面进行注解,@Resource、@Autowired一般最好放在setter中,这样的话可以不会破坏其私有属性的,如果放在属性中的话会利用反射机制去获取对象。

Spring的配置完毕之后,接下来就是Service层的实现了Service层的设置就比较简单了,只是针对某个ORM进行,下面只是给出Service实现模块代码:

/**  
 * 文件名:UserServiceImpl.java  
 *  
 * 版本信息:  
 * 日期:2010-2-12  
 * Copyright 足下 Corporation 2010   
 * 版权所有  
 *  
 */
package org.lxh.service.impl;

import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.lxh.bean.User;
import org.lxh.dao.interfaces.BasicDaoIf;
import org.lxh.service.interfaces.UserServiceIf;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserServiceIf {
	
	private BasicDaoIf<User, Integer> basicDao;
		
	public BasicDaoIf<User, Integer> getBasicDao() {
		return basicDao;
	}

	@Resource(name="basicDao")
	public void setBasicDao(BasicDaoIf<User, Integer> basicDao) {
		this.basicDao = basicDao;
	}

	@Override
	public boolean clearAllUser(User user) {
		 
		return basicDao.deleteAll(user);
	}

	@Override
	public boolean clearUserById(Integer id) {
		 
		return basicDao.deleteById(User.class, id);
	}

	@Override
	public List<User> listAllUser() {
		 
		return basicDao.findAll(User.class);
	}

	@Override
	public User listUserById(Integer id) {
		 
		return basicDao.findById(User.class, id);
	}

	@Override
	public boolean modifyUser(User user) {
		 
		return basicDao.update(user);
	}

	@Override
	public boolean newUser(User user) {
		 
		return basicDao.save(user);
	}
}

在Service层中一般是要加上事务处理的,这里就偷了个懒,处理事务一般可以使用Spring自带的JPA实现使用@Transmission注解就可以了,而捕捉异常的话可以在Service层中加入TryCatch选项,BasicDaoIf<User, Integer> basicDao; 中的泛型约束是指当前的实体User,主键类型是Integer类型,一一对应于BasicDaoIf中的<T,t,PK extends Serializable>.创建完成后这样一个完整的Spring+Hibernate的基本的CRUD模块就实现完成了.

posted @ 2010-02-23 17:00  EdwardLau  阅读(2367)  评论(0编辑  收藏  举报