SSM框架整合MyBatis-Plus

一.使用SSM整合Mybatis-Plus插件 及避免中间的各种坑

1.1注意事项:

	本次的集成主要是在SSM基础上进行集成Mybatsi-Plus,因为在使用引入依赖包含了mybatis和mybatis-spirng的jar
	包及因版本很容易冲突,所以本次主要说明中间的各种坑。

1.2介绍:

	 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率     而生。

1.3特性

SSM框架整合MyBatis-Plus_第1张图片

1.4.使用

1.4.1第一步引入相关jar包

引入pom依赖
	 	<dependency>
			  <groupId>com.baomidou</groupId>
			  <artifactId>mybatis-plus</artifactId>
			  <version>3.0.6</version>
 		</dependency>
这个依赖会产生如下jar包,本次使用的ssm项目所以依赖中mybatis , mybatis-spring和jsqlparser的jar包会和框架中的jar包冲突,
所以一定要先删除这三个jar包,一定不要偷懒省事用ssm框架中原有的这三个包mybatis , mybatis-spring和jsqlparser,不进行删除
再次导入,因为很可能原有的ssm项目中的这jar包和mybatis-plus中的jar版本不一致,造成冲突,然后就很难发现引起的原因了。

SSM框架整合MyBatis-Plus_第2张图片
所需要的jar包地址包含源码:https://download.csdn.net/download/qq_38394848/11851178

1.4.2修改spring的配置文件

把springdao.xml中的org.mybatis.spring.SqlSessionFactoryBean编程mybatis-plus的com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean

	<!-- 配置和mybatis的整合 -->
	<bean id="sqlSessionFactory" 	class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
	  <!-- 指定mybatis 全局配置文件的位置 -->
	  <property name="configLocation" value="classpath:mybatis-config.xml"></property>
	  <property name="dataSource" ref="dataSource"></property>      
	</bean>
	

原因解释:
原因是因为MybatisPlus中自定义了MybatisSqlSessionFactoryBean这个类,而这个类是实现了接口FactoryBean, InitializingBean, ApplicationListener,而在mybatis中有一个类也实现了这些接口,SqlSessionFactoryBean,所以在mybatisplus的配置文件中配置SqlSessionFactoryBean时需要换成mybatisplus中自定义的这个类MyBatisSqlSessionFactoryBean,并在类中加载对应的mybatis-config.xml文件。
贴一下这两个类的源码,看一眼就明白了。

Mybatis中原生的sqlSessionFactionBean源码:
package org.mybatis.spring;

import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.cache.Cache;
import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.type.TypeHandler;
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.core.NestedIOException;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {
    private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class);
    private Resource configLocation;
    private Configuration configuration;
    private Resource[] mapperLocations;
    private DataSource dataSource;
    private TransactionFactory transactionFactory;
    private Properties configurationProperties;
    private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    private SqlSessionFactory sqlSessionFactory;
    private String environment = SqlSessionFactoryBean.class.getSimpleName();
    private boolean failFast;
    private Interceptor[] plugins;
    private TypeHandler<?>[] typeHandlers;
    private String typeHandlersPackage;
    private Class<?>[] typeAliases;
    private String typeAliasesPackage;
    private Class<?> typeAliasesSuperType;
    private DatabaseIdProvider databaseIdProvider;
    private Class<? extends VFS> vfs;
    private Cache cache;
    private ObjectFactory objectFactory;
    private ObjectWrapperFactory objectWrapperFactory;

    public SqlSessionFactoryBean() {
    }

     。。。。。。
}
下面是mybatsi-plus中的sqlSessionFactoryBean的源码:
package com.baomidou.mybatisplus.spring;

import com.baomidou.mybatisplus.MybatisConfiguration;
import com.baomidou.mybatisplus.MybatisXMLConfigBuilder;
import com.baomidou.mybatisplus.entity.GlobalConfiguration;
import com.baomidou.mybatisplus.enums.IEnum;
import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.handlers.EnumTypeHandler;
import com.baomidou.mybatisplus.mapper.SqlRunner;
import com.baomidou.mybatisplus.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.toolkit.PackageHelper;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import javax.sql.DataSource;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.cache.Cache;
import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.type.EnumOrdinalTypeHandler;
import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.core.NestedIOException;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {
    private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class);
    private Resource configLocation;
    private Configuration configuration;
    private Resource[] mapperLocations;
    private DataSource dataSource;
    private TransactionFactory transactionFactory;
    private Properties configurationProperties;
    private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    private SqlSessionFactory sqlSessionFactory;
    private String environment = MybatisSqlSessionFactoryBean.class.getSimpleName();
    private boolean failFast;
    private Interceptor[] plugins;
    private TypeHandler<?>[] typeHandlers;
    private String typeHandlersPackage;
    private Class<?>[] typeAliases;
    private String typeAliasesPackage;
    private String typeEnumsPackage;
    private Class<?> typeAliasesSuperType;
    private DatabaseIdProvider databaseIdProvider;
    private Class<? extends VFS> vfs;
    private Cache cache;
    private ObjectFactory objectFactory;
    private ObjectWrapperFactory objectWrapperFactory;
    private GlobalConfiguration globalConfig = GlobalConfigUtils.defaults();

    public MybatisSqlSessionFactoryBean() {
    }

     。。。。。。
}

1.4.3修改实体类

在实体类中的类上边加上@TableName("")括号的双引号里面写上实体类在数据库里面的名字
在实体类的属性上面加上@TableField("")括号的双引号里面加上属性在数据库里面的名字
例子:
SSM框架整合MyBatis-Plus_第3张图片

1.4.4使用公共mapper和server

1.4.4.1集成公共mapper接口

SSM框架整合MyBatis-Plus_第4张图片
在这里插入图片描述

1.4.4.2集成公共server

在这里插入图片描述
在这里插入图片描述
说明:
其实公共的serverImpl类还是使用了公共的maper的泛型然后server就不不用再次调用mapper啦
公共serverImpl的源码:
SSM框架整合MyBatis-Plus_第5张图片

接下来就配置完成可以使用通过的crud功能了。

你可能感兴趣的:(SSM框架整合MyBatis-Plus)