纯注解方式整合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()); } }
很希望自己是一棵树,守静、向光、安然,敏感的神经末梢,触着流云和微风,窃窃的欢喜。脚下踩着最卑贱的泥,很踏实。还有,每一天都在隐秘成长。