[使用心得]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的代码如下:
@Configuration
public 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

你可能感兴趣的:(m2eclipse)