小代学Spring Boot之自定义Starter
想要获取更多文章可以访问我的博客 – 代码无止境。
上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的。这么多ORM框架,选择哪个好呢?
小代选ORM框架
小代同学最终选用的ORM框架是MyBatis,他选择MyBatis的原因主要有以下几点:
- 可以简化我们操作数据库的步骤。
- 相对来说学习成本较低,Hibernate还需要学习其HQL查询规范。
- 使用相对广泛。
集成MyBatis
如何集成MyBatis呢?其实很简单,在我们上一篇文章《小代学Spring Boot之数据源》的基础之上,我们只需要在pom.xml文件中加入以下内容即可。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
配置MyBatis
集成MyBatis之后我们还需要相关配置才能够使用它。首先我们需要配置回话工厂和事务管理器,在DruidDatasourceConfig.java
类中添加如下内容即可:
@Bean(name = "transactionManager")
public DataSourceTransactionManager transactionManager(
@Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionFactory")
@ConditionalOnMissingBean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
return sessionFactory.getObject();
}
然后我们还需要配置Mapper.java
文件和Mapper.xml
文件的地址好让Spring知道在那里扫描我们的Mapper文件。Mapper.java
文件地址,我们可以通过@MapperScan
注解来指定。如下所示,我们在DruidDataSourceConfiguration
上加了这个注解:
@MapperScan(value = { "cn.itweknow.sbdatasource.mapper" }, sqlSessionFactoryRef = "sqlSessionFactory")
而Mapper.xml
文件的地址则需要在初始化会话工厂的过程中指定,如下所示,我们在sqlSessionFactory
方法中增加了一些内容:
@Bean(name = "sqlSessionFactory")
@ConditionalOnMissingBean(name = "sqlSessionFactory")
public SqlSessionFactorysqlSessionFactory(@Qualifier("druidDataSource") DruidDataSource druidDataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(druidDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:sqlmap/*Mapper.xml"));
return sessionFactory.getObject();
}
就这样,我们的Spring Boot项目已经成功的集成了MyBatis了。下面就一起来测试一下看下效果吧。
测试
1.新建一个名为spring_toturial
的数据库,并且新建一张t_user
表以及其对应的实体类,具体的数据库结构脚本和实体类可以点击这里获取。
2.新建UserMapper.java
接口文件,并且定义一个名为selectById
接口,如下所示:
public interface UserMapper {
User selectById(@Param("id") Integer id);
}
3.新建UserMapper.xml
文件,并且实现selectById
,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itweknow.sbdatasource.mapper.UserMapper">
<resultMap id="BaseResultMap" type="cn.itweknow.sbdatasource.dao.User">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
</resultMap>
<select id="selectById" resultMap="BaseResultMap">
select * from t_user where id = #{id}
</select>
</mapper>
4.新建selectById
的Junit测试用例,如下代码所示:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SbDatasourceApplication.class})
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelectById() {
User user = userMapper.selectById(1);
System.out.println(user);
}
}
5.执行Junit方法如果控制台能够输出如下结果,那就恭喜你成功集成MyBatis了。
User{id=1, name='abc'}
PS:学习不止,码不停蹄!如果您喜欢我的文章,就关注我吧!