想要获取更多文章可以访问我的博客 - 代码无止境 https://itweknow.cn/ .
上一篇小代同学在 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: 学习不止, 码不停蹄! 如果您喜欢我的文章, 就关注我吧!
来源: https://www.cnblogs.com/endless-code/p/11211077.html