一,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
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109