前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >4. SpringBoot整合mybatis

4. SpringBoot整合mybatis

作者头像
捞月亮的小北
发布2023-12-01 10:49:06
1280
发布2023-12-01 10:49:06
举报
文章被收录于专栏:捞月亮的小北

1. 回顾 Spring 整合 Mybatis

Spring​ 整合 Mybatis​ 需要定义很多配置类

SpringConfig​ 配置类

导入 JdbcConfig​ 配置类

导入 MybatisConfig​ 配置类

代码语言:javascript
复制
@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}

JdbcConfig​ 配置类

定义数据源(加载 properties 配置项:driver、url、username、password)

代码语言:javascript
复制
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

定义映射配置

代码语言:javascript
复制
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
    MapperScannerConfigurer msc = new MapperScannerConfigurer();
    msc.setBasePackage("com.itheima.dao");
    return msc;
}

@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
    SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
    ssfb.setTypeAliasesPackage("com.itheima.domain");
    ssfb.setDataSource(dataSource);
    return ssfb;
}

2. SpringBoot 整合 mybatis

  1. 创建模块 ​
image
image

定义实体类

代码语言:javascript
复制
public class Book {
    private Integer id;
    private String name;
    private String type;
    private String description;

    public Book() {
    }

    public Book(Integer id, String name, String type, String description) {
        this.id = id;
        this.name = name;
        this.type = type;
        this.description = description;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", description='" + description + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

定义 Dao 接口

代码语言:javascript
复制
public interface BookDao {
    @Select("select * from tbl_book where id = #{id}")
    public Book getById(Integer id);
}

定义测试类

代码语言:javascript
复制
@SpringBootTest
class Springboot03MybatisTestApplicationTests {


    @Autowired
    private BookDao bookDao;

    @Test
    void contextLoads() {
    }

    @Test
    public void testMybatis() {
        Book book = bookDao.getById(1);
        System.out.println(book);
    }


}

编写配置

application.yml​ 中指定数据库

代码语言:javascript
复制
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    username: root
    password: 123456

测试

运行测试方法,我们会看到如下错误信息

image
image

错误信息显示在 Spring​ 容器中没有 BookDao​ 类型的 bean​。为什么会出现这种情况呢?

原因是 Mybatis​ 会扫描接口并创建接口的代码对象交给 Spring​ 管理,但是现在并没有告诉 Mybatis​ 哪个是 dao​ 接口。而我们要解决这个问题需要在BookDao​ 接口上使用 @Mapper​ ,BookDao​ 接口改进为

image
image

注意:

SpringBoot​ 版本低于 2.4.3(不含),Mysql 驱动版本大于 8.0 时,需要在 url 连接串中配置时区 jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC​,或在 MySQL 数据库端配置时区解决此问题

使用 Druid 数据源

导入 Druid​ 依赖

代码语言:javascript
复制
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

application.yml​ 配置文件配置 可以通过 spring.datasource.type​ 来配置使用什么数据源。配置文件内容可以改进为

代码语言:javascript
复制
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 回顾 Spring 整合 Mybatis
  • 2. SpringBoot 整合 mybatis
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档