三十九 Java开发学习----SpringBoot整合mybatis

一、回顾Spring整合MybatisSpring 整合 Mybatis 需要定义很多配置类

  • SpringConfig 配置类
    • 导入 JdbcConfig 配置类
    • 导入 MybatisConfig 配置类
      @Configuration@ComponentScan("com.itheima")@PropertySource("classpath:jdbc.properties")@Import({JdbcConfig.class,MyBatisConfig.class})public class SpringConfig {}?
  • JdbcConfig 配置类
    • 定义数据源(加载properties配置项:driver、url、username、password)
      public class JdbcConfig {    @Value("${jdbc.driver}")    private String driver;    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String userName;    @Value("${jdbc.password}")    private String password;?    @Bean    public DataSource getDataSource(){        DruidDataSource ds = new DruidDataSource();        ds.setDriverClassName(driver);        ds.setUrl(url);        ds.setUsername(userName);        ds.setPassword(password);        return ds;  }}
  • MybatisConfig 配置类
    • 定义 SqlSessionFactoryBean
    • 定义映射配置
      @Beanpublic MapperScannerConfigurer getMapperScannerConfigurer(){    MapperScannerConfigurer msc = new MapperScannerConfigurer();    msc.setBasePackage("com.itheima.dao");    return msc;}?@Beanpublic SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){    SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();    ssfb.setTypeAliasesPackage("com.itheima.domain");    ssfb.setDataSource(dataSource);    return ssfb;}?
二、SpringBoot整合mybatis2.1 创建模块
  • 创建新模块,选择 Spring Initializr,并配置模块相关基础信息

三十九 Java开发学习----SpringBoot整合mybatis

文章插图
  • 选择当前模块需要使用的技术集(MyBatis、MySQL)
    三十九 Java开发学习----SpringBoot整合mybatis

    文章插图
2.2 定义实体类在 com.itheima.domain 包下定义实体类 Book , 内容如下
public class Book {    private Integer id;    private String name;    private String type;    private String description;        //setter andgetter        //toString}2.3 定义dao接口在 com.itheima.dao 包下定义 BookDao 接口,内容如下
public interface BookDao {    @Select("select * from tbl_book where id = #{id}")    public Book getById(Integer id);}2.4 定义测试类在 test/java 下定义包 com.itheima,在该包下测试类 , 内容如下
【三十九 Java开发学习----SpringBoot整合mybatis】@SpringBootTestclass Springboot08MybatisApplicationTests {?@Autowiredprivate BookDao bookDao;?@Testvoid testGetById() {Book book = bookDao.getById(1);System.out.println(book);}}2.5 编写配置我们代码中并没有指定连接哪儿个数据库,用户名是什么 , 密码是什么 。所以这部分需要在 SpringBoot 的配置文件中进行配合 。
application.yml 配置文件中配置如下内容
spring:datasource:  driver-class-name: com.mysql.jdbc.Driver  url: jdbc:mysql://localhost:3306/ssm_db  username: root  password: root2.6 测试运行测试方法,我们会看到如下错误信息
三十九 Java开发学习----SpringBoot整合mybatis

文章插图
错误信息显示在 Spring 容器中没有 BookDao 类型的 bean 。为什么会出现这种情况呢?
原因是 Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理 , 但是现在并没有告诉 Mybatis 哪个是 dao 接口 。而我们要解决这个问题需要在BookDao 接口上使用 @Mapper  , BookDao 接口改进为
@Mapperpublic interface BookDao {    @Select("select * from tbl_book where id = #{id}")    public Book getById(Integer id);}
注意:
SpringBoot 版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区 jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC,或在MySQL数据库端配置时区解决此问题

推荐阅读