前言

① 本篇博客将从0开始将Spring框架和Mybatis框架完美融合

② 前提知识:SpringIOC、Mybatis、Maven

③ 将这两个框架集成在一起主要使用SpringIOC的特性,为什么IOC可以将两个框架集成在一起呢?

是因为IOC能创建对象,我们可以将Mybatis框架中的对象交给Spring统一创建

④ 回顾mybatis的使用步骤,需要用到的对象

  • ​ 定义接口
  • ​ 定义Mapper文件
  • ​ 定义mybatis的主配置文件
  • ​ 创建dao的代理对象
  • ​ 使用dao的代理对象调用方法
要使用dao对象,需要使用getMapper();
使用getMapper方法,首先要获取sqlSession对象
使用sqlSessionFactory的openSession方法,可以获取sqlSession对象
要创建sqlSessionFactory对象,通过读取mybatis.xml创建
mybatis.xml里面必须有数据库信息和dao接口的映射位置

⑤ 通过以上步骤,我们就明白了Spring要帮我们创建什么对象

连接池类的对象

sqlSessionFactory对象

创建dao对象

集成步骤

0、项目结构

这是搭建完成后的项目结构,大家可以根据我这个结构搭建
在这里插入图片描述

1、新建Maven项目
2、导入依赖
<dependencies>
    <!-- junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!-- mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>
    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <!-- spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.6</version>
    </dependency>
    <!-- mybatis-spring -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.6</version>
    </dependency>
    <!-- druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.5</version>
    </dependency>
    <!-- spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.6</version>
    </dependency>
</dependencies>
3、创建实体类
public class User {

    private int id;
    private String name;
    private int age;

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
4、创建Dao接口和对应Mapper
public interface UserDao {

    //查询所有用户
    List<User> allUser();
}
5、创建Mybatis主配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

</configuration>
6、创建Service类,属性是dao
public class UserService {

    UserDao userDao;

    //使用set注入赋值
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public List<User> allUser(){
        return userDao.allUser();
    }
}
7、创建Spring主配置文件

数据源

sqlSessionFactory

Dao对象

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--声明数据源 作用:连接数据库,代替mybatis自带的数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<!--驱动可以不写,德鲁伊数据库连接池会根据url地址自动匹配-->
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url"value="填入自己的数据库url地址"/>
        <property name="username" value="自己数据库账号"></property>
        <property name="password" value="自己数据库密码"></property>
    </bean>

    <!--声明sqlSessionFactoryBean,这个类的内部会创建sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--Mybatis创建sqlSessionFactory需要数据源和mapper映射文件,同理这里也需要-->
        <property name="dataSource" ref="dataSource"></property>
        <!--mybatis的主配置文件里面有Mapper映射文件地址-->
        <property name="configLocation" value="mybatis.xml"></property>
    </bean>

    <!--创建dao对象   
		使用sqlsession的getMapper()
        MapperScannerConfigurer:在内部调用getMapper,生成每个dao接口的代理对象
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!--将sqlSessionFactory注入-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        <!--
			指定dao接口所在的包名
            MapperScannerConfigurer会扫描这个包下面的所有dao接口,会给每个dao接口执行getMapper()
            为每个dao接口生成代理对象,创建好的对象放到spring容器中,名称为接口名首字母小写
        -->
        <property name="basePackage" value="com.ff.dao"></property>
    </bean>

</beans>

测试

public class UserServlet {

    @Test
    public void allUser() {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        UserDao userDao = context.getBean("userDao", UserDao.class);

        List<User> users = userDao.allUser();

        for (User user : users) {
            System.out.println(user);
        }
        
    }
}

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐