Spring的注解
Beans配置文件的注解
对Bean文件注解;
在类上面,使用
@Component(“在xml中的id”)
表示注册一个Bean
@Resource
private SessionFactory sf;
表示依赖一个外部文件:
对业务对象的依赖
例如epetService;
@Resource
private IPetDao petdao;(可以不要set,get方法)
业务操作对象(具有事务功能的业务对象的注解)
@扫描srping注解
<!-- 扫描spring注解 -->
<context:component-scan base-package="com.my">
</context:component-scan>
<!-- 提供事务注解支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
持久层
@Repository("name")
展示层(Action)
@Controller
业务层
@Service
@Resource(name="")
当容器里面有多个同类型的Bean的时候,就需要指定name;
如果有两个同name但是类型不同的话?用type?
事务管理的注解,propagation代表事务隔离级别,
@transactional(propagation=Propagation.required,readonly=true)
@Autowired自动注入,等价于@Resource
@Qualifier("name")等价于@Resource(name="name")
Hibernate与MyBatis的同时使用
<!-- 数据源(第三方dhcp数据源连接池) -->
<bean id="dbcp_dateSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="defaultAutoCommit" value="false"></property>
<property name="initialSize" value="5"></property>
</bean>
<!-- 基于hibernate的Session工厂 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 数据源,在这里使用了第三方的连接池当做数据源 ,该参考类要实现了sql.dateSource接口 -->
<property name="dataSource" ref="dbcp_dateSource">
</property>
<!-- 将hibernate的设置参数引入Spring配置,如此就不用单独设置hibernate配置文件 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
<!-- 要扫描的包,导入包内注解好映射的实体类 -->
<property name="packagesToScan" value="com.my.pet.model"></property>
</bean>
<!-- Hibernate事务管理器的配置,Mybatis也依托该管理器进行事务管理 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 为什么不使用Mybatis事务管理器了呢,因为事务管理器的底层实现基本类似, 都是 将 Session.autoCommit设置为false,然后事务运行完再提交,所以对于Mybatis可以借用Hibernate的事务管理器;
<
-->
</beans>
在代码中,Mybatis&&Hibernate的同时实现
两者的区别在于Session工厂的不同,所以我们完全可以在Spring中注册两个SessionFactoryBean,分别问Hibernate和Mybatis服务,正巧两个的Session工厂属于不同的类。;
一个是sqlSessionFactory,一个是sessionFactory,从命名上也避免了冲突;
实现如下:
@Repository("diaryDao4Hib")
public class DiaryDaoImpl extends SqlSessionDaoSupport implements IDiaryDao {
@Resource
private SessionFactory sessionFactory;
//也可以再添加一个工厂属性,如下,也可以不添加,直接继承SqlSessionDaoSupport;
private SqlSessionFacoty sqlSessionFactory;
//在dao方法的实现中,增删改使用sessionFactory;查询使用sqlSessionFactory;
/**
*查询方法
*/
@Override
public Diary getDairyById(int diaryId) {
return getSqlSession().selectOne("getDiaryById",diaryId);
}
/**
*添加方法
*/
@Override
public void addDiary(Diary diary) {
Session session = sessionFactory.getCurrentSession();
session.save(diary);
}
}