一,Spring和MybatisPlus进行整合
MybatisPlis作为Mybatis的增强版,在原基础的封装并不做改变,所以Spring整合MybatisPuls其实就是整合Mybatis,只不过在对SqlSessionFactoryBean的配置改成了MybatisPlus提供的
所以演示整合MybatisPlus,先演示一下整合mybatis,然后在原来的基础上做一下修改即可
一,依赖详解
① Spring和MybatisPlus整合的依赖
- spring-context:上下文,这个依赖包括bean,core,aop,expression
- mysql-connector-java:mysql驱动
- druid:druid数据源
- mybatis-plus:mybatisplus依赖
- spring-orm:orm依赖
- spring-jdbc
- spring-tx:声明式事务
② mybatisplus依赖的组成部分
- mybatis:mybatis依赖
- mybatis-spring:mybatis和spring的整合依赖
- mybatis-plus
所以在导入mybatis-plus依赖时不需要导入mybatis和mybatis-spring依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.3.5</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.7.2</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.3.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.3.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.5</version> </dependency> </dependencies>
二,mybatuis和Spring整合
① 新建一个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>
</configuration>
② 新建映射配置文件目录(可选项)
③ 新建数据库连接配置文件
name=root password=123 url=jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC driverclass=com.mysql.jdbc.Driver
④ 新建一个spring配置文件
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="connection.properties"/>
<!--使用druid数据源配置datasource-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${name}"/>
<property name="password" value="${password}"/>
<property name="driverClassName" value="${driverclass}"/>
<property name="url" value="${url}"/>
</bean>
<!--配置mybatis工厂,之后配置Mybatisplus只需要把这个工厂修改成mybatisplus提供的即可-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置mybatis的数据源-->
<property name="dataSource" ref="dataSource"/>
<!--声明主配置文件位置-->
<property name="configLocation" value="classpath:/mybatisconfig.xml"/>
<!--声明映射文件地址-->
<property name="mapperLocations" value="classpath:/mapper/*"/>
</bean>
<!--扫描映射配置文件地址,这个很重要,在整合springboot时是提供@Mapper和@MapperScan来扫描的-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mapper"/>
</bean>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--开启基于注解的事务管理-->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
简单测试:
① 在数据库新建一个测试表(略)
② 建一个实体类和表字段形成映射关系
@Data
public class mybatistest {
int id;
String name;
int sex;
int age;
}
③ 创建接口映射
public interface mybatistest_mapper {
@Select("select * from mybatistest where id=#{id}")
public mybatistest selere_id(int id);
}
④ 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring.xml"})
public class mybatistest_wql {
@Autowired
mybatistest_mapper mybatistest_mapper;
@Test
public void l() throws Exception {
System.out.println(mybatistest_mapper.selere_id(1));
}
}
⑤ 结果
- 通过注解使用,不需要配置文件,但spring配置中需要必须要扫描映射接口
- 使用配置文件,在spring配置中声明映射配置文件和主配置文件的位置,在映射文件中写sql
- 注解和配置文件混合使用,一个映射接口复杂的SQL使用配置文件,简单的SQL使用注解
三,在上面原基础上进行整合Mybatis-Plus
把前面整合mybatis的一个配置工厂该成Mybatis-PLus提供的就行了
① 修改前:Mybatis提供SqlSessionFactory工厂
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置mybatis的数据源-->
<property name="dataSource" ref="dataSource"/>
<!--声明主配置文件位置-->
<property name="configLocation" value="classpath:/mybatisconfig.xml"/>
<!--声明映射文件地址-->
<property name="mapperLocations" value="classpath:/mapper/*"/>
</bean>
② 修改后:Mybatis-Plus提供SqlSessionFactory工厂
<bean class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<!--配置mybatis的数据源-->
<property name="dataSource" ref="dataSource"/>
<!--声明主配置文件位置-->
<property name="configLocation" value="classpath:/mybatisconfig.xml"/>
<!--声明映射文件地址-->
<property name="mapperLocations" value="classpath:/mapper/*"/>
</bean>
修改这一处即可,使用方面Mybatis的所以操作都能实现,并在其基础上对功能进行了增强
运行前面写的测试:
二,SpringBoot整合MybatisPlus
一,Mybatis-Plus场景启动器
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>
这个场景启动器包括:
- Mybatis
- Mybatis-Spring
- spring-boot-starter-jdbc
- ……
所以在导入这个场景启动器后,不需要导入mybatis合jdbc场景启动器
二,Mybatis-Plus的自动配置
Mybatis-Plus的自动配置类是com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration
将MybatisPlusAutoConfiguration源码进行拆分:
① 类上注解
@Configuration
//项目是否包含SqlSessionFactory和SqlSessionFactoryBean类
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
//容器是否包含DataSource且只有一个
@ConditionalOnSingleCandidate(DataSource.class)
//跟配置文件绑定
@EnableConfigurationProperties({MybatisPlusProperties.class})
//在DataSourceAutoConfiguration数据源和MybatisPlusLanguageDriverAutoConfiguration配置之后加载
@AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisPlusLanguageDriverAutoConfiguration.class})
public class MybatisPlusAutoConfiguration implements InitializingBean {
……………………
}
② sqlSessionFactory的自动配置
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setVfs(SpringBootVFS.class);
if (StringUtils.hasText(this.properties.getConfigLocation())) {
factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
}
……………………
③MybatisPlusProperties的配置类
@ConfigurationProperties(
prefix = "mybatis-plus"//跟配置文件的mybatis-plus前缀绑定
)
public class MybatisPlusProperties {
private static final ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
//主配置文件路径
private String configLocation;
//映射文件地址,默认是在类路径mapper文件夹下的任何.xml文件
private String[] mapperLocations = new String[]{"classpath*:/mapper/**/*.xml"};
//包别名
private String typeAliasesPackage;
private Class<?> typeAliasesSuperType;
private String typeHandlersPackage;
private boolean checkConfigLocation = false;
private ExecutorType executorType;
private Class<? extends LanguageDriver> defaultScriptingLanguageDriver;
private Properties configurationProperties;
@NestedConfigurationProperty
private MybatisConfiguration configuration;
private String typeEnumsPackage;
…………
自动配置的总结:
- SqlSessionFactory自动配置好底层容器中的默认数据源
- MapperLocation自动配置路径为classpath*:/mapper/**/*.xml,任意包的类路径下的所有mapper文件夹下的所有xml文件都是映射文件
- 容器中也自动配置好了的SqlSessionTemplate
- 和Myabtis自动配置一样,@Mapper标注的接口会被自动扫描,但MybatisPlus建议使用@MapperScan进行批量扫描
三,简单使用MybatisPlus
-
配置版的Mybatis
-
注解般的Mybatis
-
混合版的mybatis
-
使用BaseMapper接口,对对单表的操作进行简化
@Data
@ToString
@TableName("mybatistest")//声明它要映射的表名,默认不写为类名
public class mybatisplus_pojo {
int id;
String name;
int sex;
int age;
}
② 映射接口
@Mapper//声明这个注解表名为映射接口,底层会进行扫描
public interface mybatisplus_mapper extends BaseMapper<mybatisplus_pojo> {
@Override
mybatisplus_pojo selectById(Serializable id);
}
③ test测试
@SpringBootTest
class SpringbootMybatisplusDomeApplicationTests {
@Autowired
mybatisplus_mapper mapper;
@Test
void contextLoads() {
mybatisplus_pojo selectById = mapper.selectById(1L);
System.out.println(selectById);
}}
④ 结果











Comments | NOTHING