前言:通过前面的内容,我们学习了Spring和MyBatis框架,了解Spring可以作为粘合剂,使其他框架组合在一起建立一个更完整独立的体系,下面带大家学习Spring整合MyBatis的步骤。
1、导入依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
</dependencies>
2、配置mybatis文件mybatis-config.xml(不配置数据源,只取别名和引入映射文件)和映射文件XXXMapper.xml
<?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>
<settings>
<setting name="autoMappingBehavior" value="FULL"/>
</settings>
<!--取别名-->
<typeAliases>
<package name="pojo"/>
</typeAliases>
<!--加载sql映射文件-->
<mappers>
<mapper resource="mapper/XXXMapper.xml"/>
</mappers>
</configuration>
3、创建实体类,以及接口(三层结构)
4、建立Spring配置文件applicationContext.xml
配置数据源所用的配置文件:database.properties
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:component-scan base-package="service,mapper" />
<!--配置数据源-->
<context:property-placeholder location="database.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${drive}"/>
<property name="url" value="${url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.pwd}"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--配置扫描包-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper"/>
</bean>
</beans>
BasicDataSource:
BasicDataSource是Apache Commons DBCP(Database Connection Pool)库中的一个类,用于创建和管理数据库连接池。
BasicDataSource类的源码位于org.apache.commons.dbcp2包下,继承自org.apache.commons.dbcp2.PoolingDataSource接口,实现了javax.sql.DataSource接口。
以下是重要方法和属性的解析:
- setDriverClassName(String driverClassName)方法:用于设置JDBC驱动程序的类名。
- setUrl(String url)方法:用于设置数据库的URL。
- setUsername(String username)方法:用于设置登录数据库所需的用户名。
- setPassword(String password)方法:用于设置登录数据库所需的密码。
- setInitialSize(int initialSize)方法:用于设置连接池的初始大小,即连接池启动时创建的连接数。
- setMaxTotal(int maxTotal)方法:用于设置连接池的最大连接数。
- setMaxWaitMillis(long maxWaitMillis)方法:用于设置获取连接的最大等待时间。
- setValidationQuery(String validationQuery)方法:用于设置用于检验连接是否有效的SQL查询语句。
- createDataSource()方法:该方法用于创建数据源。在方法内部,首先会根据配置的属性创建BasicDataSource对象,并通过setters方法设置相关属性值。然后,设置连接池的验证查询语句、验证查询超时时间、连接池的最大生存时间等属性。最后,返回创建好的BasicDataSource对象。
- getConnection()方法:该方法是实现javax.sql.DataSource接口的方法,用于获取数据库连接。在方法内部,首先通过连接池的borrowObject()方法从连接池中获取一个连接对象。如果连接对象为空,则会根据连接池的配置创建一个新的连接对象。
- close()方法:用于关闭连接池,释放所有的数据库连接。
SqlSessionFactoryBean:
SqlSessionFactoryBean是Spring框架提供的一个用于创建和配置MyBatis的SqlSessionFactory的工厂类。它是MyBatis与Spring框架的整合的关键之一。
SqlSessionFactoryBean的主要作用是创建SqlSessionFactory实例,并将其配置为Spring容器中的一个bean,以供其他组件使用。SqlSessionFactory是MyBatis的核心接口,用于生成SqlSession,而SqlSession则用于执行SQL语句和管理数据库连接。
下面是SqlSessionFactoryBean的一些主要属性和功能:
- dataSource:指定数据源,用于获取数据库连接。可以配置一个JDBC数据源或者一个Spring管理的数据源。
- configLocation:指定MyBatis的配置文件位置。通过配置文件可以进行一些全局配置,如类型别名、插件、拦截器等。
- mapperLocations:指定Mapper接口文件的位置。Mapper接口定义了SQL语句的映射关系,通过扫描指定位置下的Mapper接口文件,可以自动注册Mapper接口。
- typeAliasesPackage:指定实体类(POJO)的包路径。通过扫描指定包路径下的类,可以自动注册实体类的别名。
- plugins:配置插件列表。插件可以对SQL执行过程进行拦截和增强,如分页插件、SQL日志打印插件等。
- transactionFactory:指定事务管理器。可以配置JDBC事务管理器或者Spring的事务管理器。
- environment:指定MyBatis的运行环境。一个SqlSessionFactory可以配置多个运行环境,每个环境可以有不同的数据源和事务管理器。
除了上述属性外,SqlSessionFactoryBean还提供了一些可重写的方法,可以进行自定义配置。
总结来说,SqlSessionFactoryBean是Spring框架与MyBatis整合的桥梁,通过配置SqlSessionFactoryBean,我们可以方便地创建和配置MyBatis的SqlSessionFactory,并将其纳入Spring容器管理。这样,我们就可以在Spring应用中轻松使用MyBatis进行数据库操作。
MapperScannerConfigurer:
MapperScannerConfigurer是Spring框架中的一个类,用于自动扫描并注册MyBatis的Mapper接口,位于org.mybatis.spring包下,继承自org.springframework.beans.factory.config.BeanDefinitionRegistryPostProcessor接口,是一个Bean定义注册后处理器。
MapperScannerConfigurer主要是通过扫描指定包路径下的Mapper接口,并将其注册为Spring的Bean定义。这样,在使用时就可以通过@Autowired注解或者@Autowired标签来自动注入Mapper接口,方便地进行数据库操作。
5、编写测试代码
6、测试