其实这篇文章应该是上篇《Servlet3.0下基于注解的SpringMVC3.1配置 完全零配置文件》的续篇,因为上篇只介绍到web工程和Spring(包括MVC)的零配置,相对于传统的SSH来说,相当于SS零配置了。那么S和H的结合如果零配置文件呢。 Hibernate的注解配置大家应该不会陌生。主要就是对实体类的配置,注明对应的表和字段即可。 01. /** 02. * 用户模型 03. * 04. * @author lihzh 05. * @alia OneCoder 06. */ 07. @Entity 08. @Table (name= "snm_user" ) 09. public class User implements Serializable { 10. 11. private static final long serialVersionUID = -6925982814013703984L; 12. 13. @Id 14. private int id; 15. @Column (length = 20 , nullable = false ) 16. private String name; 17. @Column (length = 32 , nullable = false ) 18. private String password; 19. @Column (length = 64 , nullable = false ) 20. private String email; 21. @Column (name = "ctime" , length = 20 , nullable = false ) 22. private long createTime; 23. ....
主要还是原有数据源和SessionFactory的注解配置方式的改变。这里利用Spring提供的注解方式,单独抽出一个数据源配置类
01. /** 02. * 数据源配置类 03. * 04. * @author lihzh 05. * @alia OneCoder 06. */ 07. @Configuration 08. @PropertySource ( "/conf/jdbc.properties" ) 09. public class DataSourceConfig { 10. 11. @Value ( "${jdbc.driverClass}" ) String driverClass; 12. @Value ( "${jdbc.url}" ) String url; 13. @Value ( "${jdbc.user}" ) String user; 14. @Value ( "${jdbc.password}" ) String password; 15. 16. @Bean 17. public DataSource dataSource() throws PropertyVetoException { 18. ComboPooledDataSource dataSource = new ComboPooledDataSource(); 19. dataSource.setDriverClass(driverClass); 20. dataSource.setJdbcUrl(url); 21. dataSource.setUser(user); 22. dataSource.setPassword(password); 23. return dataSource; 24. } 25. 26. @Bean 27. public LocalSessionFactoryBean sessionFactory() throws PropertyVetoException { 28. LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); 29. sessionFactoryBean.setDataSource(dataSource()); 30. Properties hibernateProperties = new Properties(); 31. hibernateProperties.setProperty( "hibernate.dialect" , "org.hibernate.dialect.<a href=" http: //www./database/dbmy/" target="_blank" class="keylink">MySQL</a>Dialect"); 32. sessionFactoryBean.setHibernateProperties(hibernateProperties); 33. sessionFactoryBean.setPackagesToScan( "com.coderli.shurnim.*.model" ); 34. return sessionFactoryBean; 35. } 36. 37. @Bean 38. public HibernateTransactionManager txManager() throws PropertyVetoException { 39. HibernateTransactionManager txManager = new HibernateTransactionManager(); 40. txManager.setSessionFactory(sessionFactory().getObject()); 41. return txManager; 42. } 43. }
配置了数据源,SessionFactory和事物管理类。在SessionFactory中声明了扫描实体注解的包路径。这里把数据源的配置单独提到了jdbc.properties这个配置文件中,主要是考虑在实际实施过程中,数据库链接是一个需要经常修改的项,所以提出在项目配置之外,以方便实施人员独立配置。www. 然后在原有的DefaultAppConfig中引用该配置。用@Import注解:
1. @Configuration 2. @ComponentScan (basePackages = "com.coderli.shurnim.*.biz" ) 3. @Import (DataSourceConfig. class ) 4. @EnableTransactionManagement 5. public class DefaultAppConfig {
同时启用了事物注解。至此,Spring3.1+Hibernate4.1.7的配置基本完成了。启动项目。稍微修改一下原UserAction,使其读取数据库 1. @RequestMapping ( "/user.do" ) 2. @Transactional 3. public void test(HttpServletResponse response) throws IOException { 4. _log.info( "Hi, u guy" ); 5. List<User> users = userDAO.getAll(); 6. response.getWriter().write( "name: " + users.get( 0 ).getName() + "; email: " + users.get( 0 ).getEmail()); 7. }
启动服务,一切OK。 需要说明的是,OneCoder的学习习惯是不停的折腾,所以这里虽然是配置好了,正常使用。但是在配置过程中,还是遇到一些没有解决的问题。比如,根据@Configuration的注解说明,OneCoder曾响在DataSourceConfig中仅仅保留数据源配置,将SessionFactory和事物的配置都放到AppConfig中,然后通过@Autowire或者@Inject的注解引用进来,用了两种方式都还没有成功。待OneCoder研究清楚后,再一一说明。这里给出配置,仅仅给大家提供一个样例参考。更多的细节,还需要大家自己研究:)。OneCoder感觉,这种配置方式,还有挺有意思的。 |
|
来自: 旭龙 > 《springMVC》