最近在做项目,最初使用的框架是:spring+mybatis+springmvc+redis+jwt+jsp,后来发现项目中需要编写的sql语句大多重复且简单,为了简化开发,节省开发时间,决定将mybatis换为mybatis-plus进行开发
开始整合
前提:ssm框架已经整合完成
-
导入依赖
导入mybatis-plus的依赖后需要将myabtis和mybatis-spring依赖移除,因为mybatis-plus的依赖中已经集成了,如果不移除可能会产生问题。
<!--我这里选择导入最新的mybatis-plus依赖,如果导入这个版本的依赖并且你需要使用它的代码生成器,则需要使用最新版的代码生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.5.1</version> </dependency> <!--模板引擎,不是必须的--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency>
-
更换spring的xml配置文件中对于mybatis的配置
重点就是sqlSessionFactory的Class需要更换为
com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean
<bean class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean" id="sqlSessionFactory"> <!-- 绑定数据库连接池配置--> <property name="dataSource" ref="dataSource"/> <!-- mapper.xml文件的位置--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> <!-- 绑定mybatis-config.xml配置文件--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 设置别名--> <property name="typeAliasesPackage" value="com.lzj.entity"/> <!-- MP 全局配置注入 --> <property name="globalConfig" ref="globalConfig" /> </bean> <!-- 定义 MP 全局策略 --> <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig"> <!-- 全局的主键策略--> <!-- <property name="" value="0"/>--> </bean>
-
项目中去使用mybatis-plus简化开发
-
创建实体类
-
创建mapper层(或者说dao层)
注意:mapper的接口必需要继承BaseMapper<实体类名称>,否则无法使用mybatis-plus自带的方法
public interface MenuMapper extends BaseMapper<Menu> { /** * 获得菜单表全部数据 * @return */ List<Menu> listMenu(); }
-
创建mapper.xml
-
测试类测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") public class MenuMapperTest { @Autowired private MenuMapper menuMapper; @Test public void listMenu(){ // List<Menu> menus = menuMapper.listMenu(); // System.out.println(menus); // menuMapper.selectList(null).forEach(menu -> { // System.out.println(menu); // }); //mapper接口中并没有selectCount方法,这是mybatis-plus所提供的 System.out.println(menuMapper.selectCount(null)); } }
-
整合时遇到的问题
-
无法使用mybatis-plus提供的方法
出现这个问题后我一直以为是我的mybatis-plus没有整合好,结果到最后发现是我的mapper层接口没有继承BaseMapper类导致的
-
我的实体类中包含了其它实体类的对象,导致查询出错
这个的解决方法就是在实体类中不是数据库中表的字段上加上注解@TableField(exist = false)即可解决