其实这篇文章应该是上篇《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.it165.net/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.it165.net
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感觉,这种配置方式,还有挺有意思的。
联系客服