纯注解方式整合Spring和Mybatis框架

一、配置信息介绍

application-dao.xml

   application-dao.xml配置文件中配置的内容包含以下4项:

  • 读取jdbc.properties文件中的数据连接信息。
  • 创建Druid对象,并将读取的数据连接信息注入到Druid数据连接池对象中。
  • 创建SqlSessionFactoryBean对象,将并将Druid对象注入到SqlSessionFactoryBean对象中。
  • 创建MapperScannerConfigurer对象,并指定扫描的Mapper的路径。

application-service.xml

      application-service.xml配置文件中只配置了包扫描,指定需要扫描到Spring 的Service层所在的包路径。

二、纯注解方式整合Spring和Mybatis框架

    接下来,将项目中的XML配置文件删除(注释),使用纯注解的配置类依次替换对应的XML文件内容,以完成 纯注解的SSM框架整合。具体实现步骤如下所示。

1、数据库配置类

创建名称为JdbcConfig的类,用于获取数据库连接信息并定义创建数据源的对象方法,并定义getDataSource()方法,用于创建DruidDataSource对象。

/*
等同于
<context:property-placeholder location="classpath*:jdbc.properties"/>
 */
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
    /*
    使用注入的形式,读取properties文件中的属性值,
    等同于<property name="*******" value="${jdbc.driver}"/>
     */
    @Value("${jdbc.driverClassName}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;

    /*定义dataSource的bean, 等同于
   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    */
    @Bean("dataSource")
    public DataSource getDataSource() {
        //创建对象
        DruidDataSource ds = new DruidDataSource();
               /*
	        等同于set属性注入<property name="driverClassName" value="driver"/>
	         */
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

2、创建Mybatis配置类

    创建名称为MyBatisConfig的类,在MyBatisConfig类中定义getSqlSessionFactoryBean()方法,用于创建SqlSessionFactoryBean对象并返回。

public class MyBatisConfig {
    /*
    定义MyBatis的核心连接工厂bean,
    等同于<bean class="org.mybatis.spring.SqlSessionFactoryBean">
     参数使用自动装配的形式加载dataSource,
    为set注入提供数据源,dataSource来源于JdbcConfig中的配置
     */
    @Bean
    public SqlSessionFactoryBean getSqlSessionFactoryBean(
            @Autowired DataSource dataSource) {
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        //等同于<property name="dataSource" ref="dataSource"/>
        ssfb.setDataSource(dataSource);
        ssfb.setMapperLocations(resolveMapperLocations());
        return ssfb;
    }
    public Resource[] resolveMapperLocations() {
        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
        List<String> mapperLocations = new ArrayList<>();
        mapperLocations.add("classpath:mapper/BookMapper.xml");
        List<Resource> resources = new ArrayList();
        if (!CollectionUtils.isEmpty(mapperLocations)) {
            for (String mapperLocation : mapperLocations) {
                try {
                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
                    resources.addAll(Arrays.asList(mappers));
                } catch (IOException e) {
                    System.out.println("Get myBatis resources happened exception: " + e);
                }
            }
        }

        return resources.toArray(new Resource[resources.size()]);
    }

    /*
    定义MyBatis的映射扫描,
    等同于<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     */
    @Bean
    public MapperScannerConfigurer getMapperScannerConfigurer() {
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        //等同于<property name="basePackage" value="com.itheima.dao"/>
        msc.setBasePackage("com.gqx.dao");
        return msc;
    }


}

3、创建Spring配置类

    创建名称为SpringConfig的类作为项目定义Bean的源头,并扫描Service层对应的包。 

@Configuration
@Import({MyBatisConfig.class, JdbcConfig.class})
/*
等同于<context:component-scan base-package="com.itheima.service">
 */
@ComponentScan(value = "com.gqx.service")
/*
将MyBatisConfig类和JdbcConfig类交给Spring管理
 */
public class SpringConfig {
}

4、创建测试类

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = {"classpath:application-service.xml",
//        "classpath:application-dao.xml"})
@ContextConfiguration(classes = SpringConfig.class) //加载配置类
public class BookServiceTest {
    @Autowired
    private BookService bookService;
    @Test
    public void findBookById() {
        Book book = bookService.findBookById(1);
        // 输出语句输出:图书id、图书名称、作者、出版社,省略
        System.out.println(book.toString());
    }
}

 

posted @ 2023-06-05 18:14  晓乎  阅读(129)  评论(0编辑  收藏  举报
总访问: counter for blog 次