zoukankan      html  css  js  c++  java
  • 小代学Spring Boot之集成MyBatis

    想要获取更多文章可以访问我的博客 - 代码无止境

    上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的。这么多ORM框架,选择哪个好呢?

    小代选ORM框架

    小代同学最终选用的ORM框架是MyBatis,他选择MyBatis的原因主要有以下几点:

    1. 可以简化我们操作数据库的步骤。
    2. 相对来说学习成本较低,Hibernate还需要学习其HQL查询规范。
    3. 使用相对广泛。

    集成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:学习不止,码不停蹄!如果您喜欢我的文章,就关注我吧!

    扫码关注“代码无止境”
  • 相关阅读:
    oracle中next_day()、last_day()函数解析
    Oracle数据库统一审核的启用测试与关闭
    20170722上课笔记
    20170721上课笔记
    20170720上课笔记
    20170719上课笔记
    20170718上课笔记
    20170717上课笔记
    《Linux系统基础》随堂笔记5
    《oracle的安装》
  • 原文地址:https://www.cnblogs.com/endless-code/p/11211077.html
Copyright © 2011-2022 走看看