【博学谷学习记录】超强总结,用心分享|Java使用Spring整合Mybatis

115 阅读2分钟

Spring简介

Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%

专业角度

  • 简化开发,降低企业级开发的复杂性
  • 框架整合,高效整合其他技术,提高企业级应用开发与运行效率

简化开发

  • IoC
  • AOP
    • 事务处理

框架整合

  • MyBatis

使用Spring整合Mybatis快速入门

1、创建Maven项目,导入坐标

需要以下依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>


    </dependencies>

2、编写连接池配置文件

jdbc.Driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///bookstore?useSSL=false
jdbc.username=root
jdbc.password=***

3、编写Domain类用于封装数据库数据,并且使用@Component注解定义bean

package com.itheima.domain;

import org.springframework.stereotype.Component;

@Component
public class Book {
    private Integer id;
    private String name;
    private Double price;
    private Integer pnum;
    private String category;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", price=" + price +
                ", pnum=" + pnum +
                ", category='" + category + ''' +
                '}';
    }

    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 Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getPnum() {
        return pnum;
    }

    public void setPnum(Integer pnum) {
        this.pnum = pnum;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}

4、编写BookDao接口,存放用注解查询Sql语句,和方法,使用@Repository定义数据层bean

@Repository
public interface BookDao {

    @Select("select * from books where id = #{id}")
    Book selectById(int id);
}

5、编写SpringConfig配置文件

使用@Configuration注解表名Spring配置文件,使用@Component注解查找Spring要管理的Bean类,使用@Import注解导入Mybatis配置文件和jdbc数据库连接池配置文件,使用@PropertySource导入数据库连接池配置文件

@Configuration
@ComponentScan("com.itheima")
@Import({MybatisConfig.class,jdbcConfig.class})
@PropertySource("jdbc.properties")
public class SpringConfig {
}

6、编写数据库连接池对象配置文件,使用Druid连接池对象

public class jdbcConfig {
    @Value("${jdbc.Driver}")
    private String diver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;


    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(diver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        return dataSource;



    }
}

7、编写Mybatis配置文件

配置SqlSessionFactoryBean对象,自动装配Druid数据源对象和MapperScannerConfigurer对象

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

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.itheima.dao");
        return msc;
    }
}

8、编写BookService对象

使用@Service标注服务层Bean类,自动装填BookDao对象

@Service
public class BookService {
    @Autowired
    private BookDao bookDao;
    public Book findBookById(int id){
        Book book = bookDao.selectById(id);


        return book;
    }
}

9、编写测试类

public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookService bookService = ctx.getBean(BookService.class);
        Book bookById = bookService.findBookById(1001);
        System.out.println(bookById);

    }

}

总结

Spring整合mybatis需要管理配置哪两个Bean,这两个Bean作用分别是什么?

  1. 使用SqlSessionFactoryBean封装SqlSessionFactory需要的环境信息

image-20210730114342060.png 2. 使用MapperScannerConfigurer加载Dao接口,创建代理对象保存到IOC容器中

image-20210730114356175.png