MyBatis-Spring的Mapper机制

本文探讨了MyBatis-Spring整合时的Mapper机制,如何简化数据库操作。在不使用整合的情况下,需要手动管理会话和连接。而整合后,Mapper可以作为成员变量注入到业务类,通过Spring的配置进行扫描和代理对象的构建。在无事务情况下,每个Mapper方法调用都会创建新的SqlSession并自动关闭,提供了便利的资源管理。
摘要由CSDN通过智能技术生成

关于MyBatis本身的Mapper机制,请参考文档 MyBatis的Mapper机制

首先,在没有使用MyBatis-Spring的情况下,我们这么去访问Mapper

public Student findStudentById(int studentId) {
   
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    try {
   
        StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
        Student student = studentMapper.queryByPrimaryKey(studentId);
        return student;
    } finally {
   
        sqlSession.close();
    }
}

每次都要调用SqlSessionFactory.openSession方法打开SqlSession会话。并且用完SqlSession之后,就需要调用SqlSession.close

SqlSession.close做了什么事情:

① 关闭数据库游标

② 关闭连接,注意:这边说的关闭连接只是调用connection.close方法,但是如果用连接池,那么connection.close一般是把连接放回连接池中,而不是直接close掉。具体要看连接池对connection的包装。

下面看看使用了MyBatis-Spring之后的Mapper是怎么样的。

我们一般会把某个Mapper以成员变量的形式注入到业务类中。比如:

public class CityCacheServiceImpl implements CityCacheService {
   

    @Autowired
    private CityMapper cityMapper;
}

我们都知道这边注入的CityMapper一般都是单例,是Spring Bean工场产生的Singleton。要知道为何CityMapper能被注入进来,就得看下MyBatis-Spring的配置了。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="mapperLocations">
        <list>
            <value>classpath:mapper/*Mapper.xml</value>
        </list>
    </property>
    <property name="transactionFactory">
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值