maven2之m2eclipse使用手册之四编写通用Dao实例(三)

 对于Service,由于功能跟Dao的差不多,所以我把主要调用方法的部分抽出来做成公共,而事务的话由于还没测试所以先去掉,接口代码就不附上了

AbstractBasicService:采用spring注解把basicDao注入,使用的所有Service类分别继承AbstractBasicService,把所引用的bean的class注入到AbstractBasicService中

public abstract class AbstractBasicService<T extends JavaBean, PK extends Serializable>
		implements BasicServiceIf<T, PK> {

	private BasicDaoIf<T, PK> basicDao;

	protected Class<T> javabeanclass;

	/**
	 * 创建一个新的实例 AbstractBasicService.
	 * 
	 * @param javabeanclass
	 */
	protected AbstractBasicService(Class<T> javabeanclass) {
		this.javabeanclass = javabeanclass;
	}

	/**
	 * basicDao
	 * 
	 * @return the basicDao
	 * @since CodingExample Ver(编码范例查看) 1.0
	 */

	public BasicDaoIf<T, PK> getBasicDao() {
		return basicDao;
	}

	/**
	 * @param basicDao
	 *            the basicDao to set
	 */
	@Resource(name = "basicDao")
	public void setBasicDao(BasicDaoIf<T, PK> basicDao) {
		this.basicDao = basicDao;
	}

	@Override
	public List<T> findAll() {

		return basicDao.findAll(javabeanclass);
	}
}

以上都是公共部分代码,测试代码,则放到src/test/java目录下,而spring的配置文件放在src/test/resources目录下,
spring的配置文件applicationContext.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:p="http://www.springframework.org/schema/p"
	xmlns:tx=http://www.springframework.org/schema/tx 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	
	<context:annotation-config />
	<context:component-scan base-package="org.lxh" />
	<tx:annotation-driven transaction-manager="hibernateTransactionManager" />
</beans>



在spring3.02现在有个新特性可以让你用一个Java类当作一个bean标签来使用,所以spring的配置文件只需要写2句话就可以了如果要带上事务的话则3句,配置spring的代码如下:
@Configurationpublic
class BeanConfig {
	private static PropertiesFactory factory = PropertiesFactory.getInstance();

	@Bean(name = { "basicDao" })
	public BasicDaoIf<JavaBean, Serializable> basicDao() {
		return BasicDaoFactory.getBasicDao();
	}

	@Bean(name = { "dataSource" })
	public BasicDataSource dataSource() {
		BasicDataSource bds = new BasicDataSource();
		bds.setDriverClassName((String) factory
				.getPropertyValueOrProperties("driverClassName"));
		bds.setUrl((String) factory.getPropertyValueOrProperties("url"));
		bds.setUsername((String) factory
				.getPropertyValueOrProperties("username"));
		bds.setPassword((String) factory
				.getPropertyValueOrProperties("password"));
		return bds;
	}

	@Bean(name = { "sessionFactory" })
	public SessionFactory getSessionFactory() throws Exception {
		AnnotationSessionFactoryBean sessionFactoryBean 
			= new AnnotationSessionFactoryBean();
		sessionFactoryBean.setDataSource(this.dataSource());
		sessionFactoryBean.setHibernateProperties((Properties) factory
				.getPropertyValueOrProperties(""));
		String packagesToScan = (String) factory
				.getPropertyValueOrProperties("packages");
		String[] packages = packagesToScan.split(":");
		if (null == packages) {
			sessionFactoryBean
					.setPackagesToScan(new String[] { packagesToScan });
		} else {
			sessionFactoryBean.setPackagesToScan(packages);
		}
		sessionFactoryBean.afterPropertiesSet();
		return sessionFactoryBean.getObject();
	}

	@Bean(name = { "hibernateTemplate" })
	public HibernateTemplate getHibernateTemplate() throws Exception {
		HibernateTemplate hibernateTemplate = new HibernateTemplate();
		hibernateTemplate.setSessionFactory(this.getSessionFactory());
		return hibernateTemplate;
	}

	@Bean(name = { "hibernateTransactionManager" })
	public HibernateTransactionManager getHibernateTransactionManager()
			throws Exception {
		HibernateTransactionManager hibernateTransactionManager 
			= new HibernateTransactionManager();
		hibernateTransactionManager.setSessionFactory(this.getSessionFactory());
		return hibernateTransactionManager;
	}
}

bean中有个地方需要读取properties所以还需要加入一个读取配置文件的工厂PropertiesFactory:
public class PropertiesFactory {   
	private static final String FILE = "springApplicationContext.properties";
	private static PropertiesFactory propertiesFactory = new PropertiesFactory();   
	private InputStream in;   
	private Properties p;   

	public static PropertiesFactory getInstance() {        
		return propertiesFactory;     
	}
	
	/** 创建一个新的实例 PropertiesFactory.**/   
	private PropertiesFactory() {      
		super();   
	}
	
	public void init() {       
		in = this.getClass().getClassLoader().getResourceAsStream(FILE);   
	}
	
	public Object getPropertyValueOrProperties(final String property) {    
	try {           
		init();        
		p = new Properties();         
		p.load(in);           
		if (StringUtils.isNotEmpty(property))         
		  return p.getProperty(property);            
		else              
		  return p;   
	} catch (Exception e) {  
		e.printStackTrace();        
		return null;       
	} 
}
springApplicationContext.properties:

url:驱动地址

driverClassName:驱动名称

username:数据库名字

password:数据库密码

packages:spring要扫描的包以,多个以分割

# JDBC Config

url=jdbc:mysql://localhost:3306/testUser
driverClassName=com.mysql.jdbc.Driver
username=root
password=root

#Hibernate Config
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update
hibernate.format_sql=true
hibernate.show_sql=true

#Spring Config
packages=org.lxh.bean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值