步骤 1 : 目前Mybatis的问题 步骤 2 : OverIsMergeablePlugin 步骤 3 : generatorConfig.xml 步骤 4 : MybatisGenerator 步骤 5 : 自动生成的Category 步骤 6 : 自动生成的CategoryExample 步骤 7 : 自动生成的CategoryMapper.xml 步骤 8 : 自动生成的CategoryMapper 步骤 9 : CategoryService没变化 步骤 10 : 修改CategoryServiceImpl 步骤 11 : CategoryController没变化 步骤 12 : 可运行项目 步骤 13 : 改动效果
目前分类管理中Mybatis中相关类都是自己手动编写的,包括:Category.java, CategoryMapper.java和CategoryMapper.xml。
尤其是CategoryMapper.xml里面主要是SQL语句,可以预见在接下来的开发任务中,随着业务逻辑的越来越复杂,SQL语句也会越来越复杂,进而导致开发速度降低,出错率增加,维护成本上升等问题。 为了解决手动编写SQL语句效率低这个问题,我们对Mybatis部分的代码,使用逆向工程进行重构。 所谓的逆向工程,就是在已经存在的数据库表结构基础上,通过工具,自动生成Category.java, CategoryMapper.java和CategoryMapper.xml。 逆向工程使用了 MybatisGenerator这个工具,不熟悉的同学请先参考教程: Mybatis Generator 逆向工程。
MybatisGenerator插件是Mybatis官方提供的,这个插件存在一个固有的Bug,即当第一次生成了CategoryMapper.xml之后,再次运行会导致CategoryMapper.xml生成重复内容,而影响正常的运行。
为了解决这个问题,需要自己写一个小插件类OverIsMergeablePlugin。 它为什么起作用说起来比较复杂,不在这里展开了,反正。。。我也是复制粘贴来的~ 至于怎么使用,将在下一个步骤generatorConfig.xml讲解,这里先准备这个类。 package com.how2java.tmall.util;
import org.mybatis.generator.api.GeneratedXmlFile;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import java.lang.reflect.Field;
import java.util.List;
public class OverIsMergeablePlugin extends PluginAdapter {
@Override
public boolean validate(List<String> warnings) {
return true;
}
@Override
public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
try {
Field field = sqlMap.getClass().getDeclaredField("isMergeable");
field.setAccessible(true);
field.setBoolean(sqlMap, false);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}
按照这种方式修改之后,分类的pojo,xml.mapper都不用自己写的,大大提高了生产效率。
在下一个知识点也会演示其余8个实体类自动生成,一下子对应的pojo,xml,mapper都好了,生成出来的代码可读性也很好,还不会出错,生产效率简直提高得不要不要的~
HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。
![]() |