第二天:集成spring
来源:互联网 发布:隔壁老王淘宝 编辑:程序博客网 时间:2024/06/06 08:18
在spring中集成hibernate就不再需要使用hibernate的配置文件了,我理解,其实集成是spring 通过设置<bean/>来创建一个sessionFactory和事务管理器
jar包在昨天的基础上导了下面这些:
spring.jar
commons-pool.jar
commons-dbcp.jar
aspectjweaver.jar
aspectjrt.jar
cglib-nodep-2.1_3.jar
common-annotations.jar
创建一个beans.xml文件用于配置spring:
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:component-scan base-package="bbs.domain.service.impl" />
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="initialSize" value="${initialSize}" />
<property name="maxActive" value="${maxActive}" />
<property name="maxIdle" value="${maxIdle}" />
<property name="minIdle" value="${minIdle}" />
</bean>
<!--
注意,使用注解配置hibernate的映射,要用下annotation那个类 <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<value>
hibernate.diacelt=org.hibernate.dialect.SQLServerDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=false
hibernate.cache.use_second_level_cache
=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
</value>
</property>
<property name="packagesToScan">
<list>
<value>bbs.domain.bean</value>
</list>
</property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- Activates @Transactional for DefaultImageDatabase -->
<tx:annotation-driven transaction-manager="txManager" />
<context:annotation-config />
</beans>
配置文件里面数据源可以直接把相关配置写到xml,也可以使用jdbc.properties单独写,在XML里用${}引用.
其他的都没有什么说的,今天主要的精力在于,如何在配置文件中设置,让hibernate能够使用注解方式设置映射.手中的资料没有说到这个内容,都是通过配置映射文件进行的
开始,自己按猜测写,没用成功
然后上网找,可能是关键字不对,没找到有用的
接着,打开spring的源程序看,发现了三个成员变量: private Class[] annotatedClasses;
private String[] annotatedPackages;
private String[] packagesToScan;
不知道如何用,也不知道有没有用
再到网上找,关键字"spring hibernate 注解 映射",找到了,发现有设annotatedClasses的,照做,测试成功.由此知道其他两个成员变量的用法.并将其测试,annotatedPackages失败,packagesToScan成功.到网上找一下,发现annotatedPackages这个很多都说不能用,想过去很可能是BUG.
再回过头来看spring源码,大致了解了处理流程,spring用到hibernate里的类,本想看一下源码,但没下hibernate的源码就没看了.
另外:那个sessionFactory的class也是网上找到的,有了昨天的教训,很快就注意到使用不同的class了.
其他代码如下:
package bbs.domain.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import bbs.domain.bean.User;
import bbs.domain.service.UserService;
@Service
@Transactional
public class UserServiceBean implements UserService {
@Resource private SessionFactory sessionFactory;
/* (non-Javadoc)
* @see bbs.domain.service.impl.UserService#save(bbs.domain.bean.User)
*/
public void save(User user){
sessionFactory.getCurrentSession().persist(user);
}
/* (non-Javadoc)
* @see bbs.domain.service.impl.UserService#update(bbs.domain.bean.User)
*/
public void update(User user){
sessionFactory.getCurrentSession().merge(user);
}
/* (non-Javadoc)
* @see bbs.domain.service.impl.UserService#getUser(java.lang.Integer)
*/
public User getUser(Integer id){
return (User)sessionFactory.getCurrentSession().get(User.class,id);
}
/* (non-Javadoc)
* @see bbs.domain.service.impl.UserService#delete(java.lang.Integer)
*/
public void delete(Integer id){
//也可以用get方法获得User对象,但load效率更高
sessionFactory.getCurrentSession().delete(
sessionFactory.getCurrentSession().load(User.class, id));
}
/* (non-Javadoc)
* @see bbs.domain.service.impl.UserService#getUsers()
*/
@SuppressWarnings("unchecked")
public List<User> getUsers(){
return sessionFactory.getCurrentSession().createQuery("from User").list();
}
/* (non-Javadoc)
* @see bbs.domain.service.impl.UserService#setSessionFactory(org.hibernate.SessionFactory)
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/* (non-Javadoc)
* @see bbs.domain.service.impl.UserService#getSessionFactory()
*/
public SessionFactory getSessionFactory() {
return sessionFactory;
}
}
其中@Service是让spring扫描到这个bean,就不要在.xml里写了@Transcation是用注解的方式使用事务,就不用去关心事务处理了.
测试代码:
@Test
public void SHtest(){
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("beans.xml");
UserService userServiceBean = (UserService) applicationContext.getBean("userServiceBean");
User user = new User();
user.setUserId("id_three");
user.setPassword("123456");
user.setNickName("天使3");
userServiceBean.save(user);
System.out.println("新加用户id:"+user.getId());
System.out.println("****************");
for (User u:userServiceBean.getUsers()){
System.out.println("用户id:"+u.getUserId()+","+"用户昵称:"+u.getNickName());
}
}
- 第二天:集成spring
- Spring+Struts集成(第二种方案)
- spring+struts的集成(第二种集成方案,推荐)
- XFire与Spring集成的第二种方式
- Proxool与spring 进行集成配置(第二种方法)
- Struts1.X与Spring集成——第二种方案
- Spring学习第二天
- Spring自学第二天
- spring的第二天
- Spring第二天
- Spring框架第二天
- Spring第二天
- Spring第二天
- Spring注解--第二天
- Spring第二天
- 第二十六天 蛰伏的Hibernate遇到春日的暖阳 —Spring MVC 集成Hibernate使用(一)
- spring+struts的集成(第二种集成方案,用得最多的方案)
- Spring集成
- WIN7 VS2005+sp1 无法调试代码了!
- POJ 1719 Shooting Contest
- Asp.net网页播放视频
- SMTP、ESMTP、POP3发送接收邮件
- java Properties的读,写操作
- 第二天:集成spring
- 学好java思想的王道
- Ubuntu无线共享上网
- Linux下查看系统信息的常用命令
- 在C#中利用ActiveX控件进行视频采集
- prototype.js
- C# 让ListBox控件的项显示图标
- ubuntu添加dvd光盘源
- 步步出错,层层分析–tns的一些常见错误分析实例