您的位置:首页 > 编程语言 > Java开发

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

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

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

publicabstractclassAbstractBasicService<TextendsJavaBean,PKextendsSerializable>
implementsBasicServiceIf<T,PK>{

privateBasicDaoIf<T,PK>basicDao;

protectedClass<T>javabeanclass;

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

/**
*basicDao
*
*@returnthebasicDao
*@sinceCodingExampleVer(编码范例查看)1.0
*/

publicBasicDaoIf<T,PK>getBasicDao(){
returnbasicDao;
}

/**
*@parambasicDao
*thebasicDaotoset
*/
@Resource(name="basicDao")
publicvoidsetBasicDao(BasicDaoIf<T,PK>basicDao){
this.basicDao=basicDao;
}

@Override
publicList<T>findAll(){

returnbasicDao.findAll(javabeanclass);
}
}

以上都是公共部分代码,测试代码,则放到src/test/java目录下,而spring的配置文件放在src/test/resources目录下,

spring的配置文件applicationContext.xml如下:


<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scanbase-package="org.lxh"/>
<tx:annotation-driventransaction-manager="hibernateTransactionManager"/>
</beans>


在spring3.02现在有个新特性可以让你用一个Java类当作一个bean标签来使用,所以spring的配置文件只需要写2句话就可以了如果要带上事务的话则3句,配置spring的代码如下:

@Configuration

publicclassBeanConfig{

privatestaticPropertiesFactoryfactory=PropertiesFactory.getInstance();


@Bean(name={"basicDao"})

publicBasicDaoIf<JavaBean,Serializable>basicDao(){

returnBasicDaoFactory.getBasicDao();

}


@Bean(name={"dataSource"})

publicBasicDataSourcedataSource(){


BasicDataSourcebds=newBasicDataSource();

bds.setDriverClassName((String)factory

.getPropertyValueOrProperties("driverClassName"));

bds.setUrl((String)factory.getPropertyValueOrProperties("url"));

bds.setUsername((String)factory

.getPropertyValueOrProperties("username"));

bds.setPassword((String)factory

.getPropertyValueOrProperties("password"));


returnbds;

}


@Bean(name={"sessionFactory"})

publicSessionFactorygetSessionFactory()throwsException{

AnnotationSessionFactoryBeansessionFactoryBean=newAnnotationSessionFactoryBean();

sessionFactoryBean.setDataSource(this.dataSource());

sessionFactoryBean.setHibernateProperties((Properties)factory

.getPropertyValueOrProperties(""));

StringpackagesToScan=(String)factory

.getPropertyValueOrProperties("packages");

String[]packages=packagesToScan.split(":");

if(null==packages){

sessionFactoryBean

.setPackagesToScan(newString[]{packagesToScan});

}else{

sessionFactoryBean.setPackagesToScan(packages);

}

sessionFactoryBean.afterPropertiesSet();

returnsessionFactoryBean.getObject();

}


@Bean(name={"hibernateTemplate"})

publicHibernateTemplategetHibernateTemplate()throwsException{

HibernateTemplatehibernateTemplate=newHibernateTemplate();

hibernateTemplate.setSessionFactory(this.getSessionFactory());

returnhibernateTemplate;

}


@Bean(name={"hibernateTransactionManager"})

publicHibernateTransactionManagergetHibernateTransactionManager()

throwsException{

HibernateTransactionManagerhibernateTransactionManager=newHibernateTransactionManager();

hibernateTransactionManager.setSessionFactory(this.getSessionFactory());

returnhibernateTransactionManager;

}


}


bean中有个地方需要读取properties所以还需要加入一个读取配置文件的工厂
PropertiesFactory:

publicclassPropertiesFactory{


privatestaticfinalStringFILE="springApplicationContext.properties";


privatestaticPropertiesFactorypropertiesFactory=newPropertiesFactory();


privateInputStreamin;


privatePropertiesp;


publicstaticPropertiesFactorygetInstance(){


returnpropertiesFactory;


}


/**

*创建一个新的实例PropertiesFactory.

*

*/

privatePropertiesFactory(){

super();

}


publicvoidinit(){

in=this.getClass().getClassLoader().getResourceAsStream(FILE);

}


publicObjectgetPropertyValueOrProperties(finalStringproperty){

try{

init();

p=newProperties();

p.load(in);

if(StringUtils.isNotEmpty(property))

returnp.getProperty(property);

else

returnp;

}catch(Exceptione){

e.printStackTrace();

returnnull;

}

}


springApplicationContext.properties:

url:驱动地址

driverClassName:驱动名称

username:数据库名字

password:数据库密码

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

#JDBCConfig

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

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

#SpringConfig
packages=org.lxh.bean
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐