
而“新手”的键盘是这样的:

说到MybatisPlus(以下简称mbp)、Druid,这俩玩意不是很简单么,我想说对于常见的我们要做到知其所以然。mbp不算是业界标准,但使用起来还是很畅快的,Druid是阿里出品的数据库连接池中间件。今天,就来玩一把mbp的系列操作。
目标:
1.利用mbp的generator自动生成entity/dao/mapper, 2.实现provider和consumer端RPC方式对DB数据查询 3.整合druid
难度:新手--战士--老兵--大师
准备:
idea201902/JDK11/ ZK3.5.5/Gradle5.4.1/Mysql8.0.11/Lombok0.25
步骤:
1.项目结构延续之前的整体构造:根项目下三个子模块,settings.gradle中可以看到:
rootProject.name = 'integrate'
include 'provider'
include 'consumer'
include 'common'
2.整体思路:先用mbp的generator生成entity/dao/mapper等,然后common中写一个公共接口,provider中实现接口提供一个服务,consumer中PRC调用这个接口,并输出DB查询结果。
3. 在前文的项目基础上,做了删减,仅保留本项目相关,去掉Nacos
4.common模块建包,并建立MysqlGenerator类,写个main入口,这里以mbp的官方为基础版本修改而来:
首先是个console读取函数,用于用户交互输入,比如指定module和表名:
public static String scanner(String tip){
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("please input " + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()){
String ipt = scanner.next();
if (StringUtils.isNotEmpty(ipt)){
return ipt;
}
}
声明一个AutoGenerator,做一些全局配置,其中的setBaseColumnList(true),是指mapper文件中的“通用查询结果列”,
AutoGenerator mpg = new AutoGenerator();
//global config
GlobalConfig gc = new GlobalConfig();
//获取当前项目的路径
String projectPath = System.getProperty("user.dir");
System.out.println("projectPath: "+projectPath);//for test
gc.setOutputDir(projectPath + "/common/src/main/java");
gc.setAuthor("xiaobiao");
gc.setFileOverride(false);
gc.setBaseColumnList(true); // XML columList
gc.setOpen(false);设置生成的entity/dao/mapper/service/controller/Impl等,里面的“%s”将会被具体的实体名代替掉。
//文件名设置
gc.setEntityName("%sEntity");
gc.setMapperName("%sDao");
gc.setXmlName("%sDao");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
gc.setMapperName("%sMapper");
mpg.setGlobalConfig(gc);数据源设置部分略过;
package设置,如果想把包分的更细,可以指定moduleName,比如我想订单order一个包,库存stock一个包,那么entity/dao/mapper/service/controller/Impl等会分别放到order/stock包下,
//包设置PackageConfig pc = new PackageConfig();
// eg: com.example.common.{module-name}.daopc.setModuleName(scanner("module-name"));
pc.setParent("com.example.common");
pc.setEntity("entity");
pc.setMapper("dao");
pc.setService("service");
pc.setServiceImpl("impl");
pc.setEntity("mapper");
mpg.setPackageInfo(pc);
模板设置,注意这里的template不是指前端模板,是指mapper的模板,注释掉这个setTemplate,那么就不会生成mapper了。
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// close xml generation,and will save at the root directory
mpg.setTemplate(new TemplateConfig());策略配置,建议打开lombok,entity会自动加上lombok标签,这样就省去了setter/getter方法,toString()等,setInclude和setExclude二选一,setInclude即要自动生成的表,setExclude相反,全部要生成,setExclude(null)即可。还可统一指定各种生成对象的父类。
//策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);// strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseEntity");strategy.setEntityLombokModel(true);// strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.BaseController");strategy.setInclude(scanner("table-name"));//需要包含的表名,允许正则表达式(与exclude二选一配置)// strategy.setSuperEntityColumns(""); //父类的公共字段strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName() + "_");mpg.setStrategy(strategy);// if use freemarker, be aware the dependency is required// mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();
5.运行一下:输入module和table名,

6.项目包下就有了:红色是没有加入git,右键git--> add,即可,

7.删除不要的文件,移动一些文件,
8.common下的service接口:

9.provider下的实现:

10.consumer下的controller层调用:

11.跑一下:启动zk-->provider---consumer,
12源码地址:其中的day04
https://github.com/xiexiaobiao/dubbo-project.git
项目复盘记:
https://www.jianshu.com/p/c5dd1b4b0697
我研究使用了一番,发现不能使用,原因未知,作者说的使用方法也略简陋

根据提示,直接将有错误的文件具体指定为utf-8,
setting-->file Encodings, 然后选convert,



就是paid字段,mbg并没有自动生成@tableField,导致无法映射,需要手动添加,为保险,建议将所有下划线的都加上映射注解。

注意 @Mapper 和 @Repository 的区别
@Mapper 是iBatis的注解,用于将实体和数据表映射,
@Repository是Spring的注解,用于注入bean,






