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

浙公网安备 33010602011771号