谈谈SqlSessionFactoryBean和MapperScannerConfigurer

谈谈SqlSessionFactoryBean和MapperScannerConfigurer

这两个类会在我们扫描dao创建接口实现类会用到,如果我们不想创建一个Mapper接口类的实现类的话(通常spring管理Mybatis的mapper对象的时候都需要创建一个接口实现类来做做对数据库的操作,不然没办法访问到Mapper.xml的代理类,这个代理类通常是SqlSession来创建的)
先给出代码


    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>



<!--    这里使用的是扫描-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="configurer">
<!--这里其实就是在创建一个代理类,也就是接口实现类,并且有属性sqlSessionFactory和sqlSessionTemplate,这样就能完成对数据库的操作了-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.kuang.dao"/>

    </bean>

这里的SqlSessionFactoryBean其实就是一个用来创建SqlFactory,它的原理就与Mybatis的工具类原理一样,它里面是有一个SqlSessionFactoryBuilder的,而且有一个读取xml的类,先读取了xml,然后把流交给SqlSessionFactoryBuilder来build()。

然后MapperScannerConfigurer就是一个扫描类,它需要一个
SqlSessionFactoryBean来创建factory和SqlSessionTemplate。然后它根据自己读取到的xml文件和对应的接口来创建一个代理类。这个代理类可以理解为就是我们之前创建的Mapper接口的实现类

Mapper接口的实现类代码:

package com.kuang.dao;

import com.kuang.pojo.Books;
import com.kuang.service.BookService;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class BooksMapperImpl extends SqlSessionDaoSupport implements BooksMapper {

    public void insertBook(Books books) {
        getSqlSession().getMapper(BooksMapper.class).insertBook(books);
    }

    public void deleteBook(int id) {
        getSqlSession().getMapper(BooksMapper.class).deleteBook(id);
    }

    public int updateBook(Books books) {
        return getSqlSession().getMapper(BooksMapper.class).updateBook(books);
    }

    public Books getBooksById(int id) {
        return getSqlSession().getMapper(BooksMapper.class).getBooksById(id);
    }

    public List<Books> getBooks() {
        return getSqlSession().getMapper(BooksMapper.class).getBooks();
    }
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值