Spring注解整合(hibernate+mybatis) 学习笔记

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);
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值