从零开始配置MybatisPlus(一)
MybatisPlus简介
为什么要用MybatisPlus?跟Mybatis有什么区别?
MybatisPlus是一个Mybatis的增强版。在不改变Mybatis基础的情况下对Mybatis的功能进行了一系列增强,极大的简化了开发流程,在此文中,将默认读者已经有Mybatis的开发经验,熟悉SpringBoot、Spring-MVC的项目架构。
MybatisPlus的配置
下面介绍一下在Spring Boot项目中,如何从零开始配置MybatisPlus
关于Spring Boot的项目,详见我另一篇文章SpringBoot 2.0项目的建立
1.导入pom.xml配置
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <!-- 这里笔者用的是MySql数据库,根据不同的数据库导入不同的xml配置 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- freemarker模板引擎,官网上还有其他引擎支持,比如Velocity、Beetl等 --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> </dependency>
2.在application.yml中配置数据库连接、项目名及端口号
spring: datasource: url: jdbc:mysql:// username: admin password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver server: port: 8099 servlet: context-path: /demo
3.在Spring Boot启动类中添加@MapperScan注解,扫描mapper文件夹
@MapperScan("com.example.demo.*.mapper") public class DemoApplication{ public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }
至此,MybatisPlus最基础的配置已经完成了,接下来在进行开发前,让我们了解一下MybatisPlus官方提供的代码生成工具,使用该工具能极大地简化繁琐的基础代码编写。
MybatisPlus代码生成器
该代码生成器在MybatisPlus官网上有代码,笔者在这里根据个人习惯和开发需求进行了一定的更改,
工具类代码:
public class MybatisPlusGenerator{ //包名 private static String packageName="com.example.demo"; //项目路径 private static String projectPath="C://demo"; public static void main(String[] args) { // assert (false) : "代码生成属于危险操作,请确定配置后取消断言执行代码生成!"; AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("admin"); gc.setOpen(false); // gc.setBaseResultMap(true);// XML ResultMap /* 自定义文件命名,注意 %s 会自动填充表实体属性! */ // gc.setMapperName("%sDao"); // gc.setXmlName("%sDao"); // gc.setServiceName("MP%sService"); // gc.setServiceImplName("%sServiceDiy"); // gc.setControllerName("%sAction"); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); // dsc.setDbType(DbType.MYSQL); // dsc.setTypeConvert(new MySqlTypeConvert() { // // 自定义数据库表字段类型转换【可选】 // @Override // public DbColumnType processTypeConvert(String fieldType) { // System.out.println("转换类型:" + fieldType); // // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。 // return super.processTypeConvert(fieldType); // } // }); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("admin"); dsc.setPassword("admin"); dsc.setUrl("jdbc:mysql://"); mpg.setDataSource(dsc); // strategy.setExclude(new String[]{"test"}); // 排除生成的表 // 自定义实体父类 // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity"); // 自定义实体,公共字段 // strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); // 自定义 mapper 父类 // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper"); // 自定义 service 父类 // strategy.setSuperServiceClass("com.baomidou.demo.TestService"); // 自定义 service 实现类父类 // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl"); // 自定义 controller 父类 // strategy.setSuperControllerClass("com.baomidou.demo.TestController"); // 【实体】是否生成字段常量(默认 false) // public static final String ID = "test_id"; // strategy.setEntityColumnConstant(true); // 【实体】是否为构建者模型(默认 false) // public User setName(String name) {this.name = name; return this;} // strategy.setEntityBuilderModel(true); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent(packageName); pc.setModuleName(scanner("模块名")); mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 如果模板引擎是 freemarker String templatePath = "/templates/mapper.xml.ftl"; List<FileOutConfig> focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); // 配置自定义输出模板 //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 // templateConfig.setEntity("templates/entity2.java"); // templateConfig.setService(); // templateConfig.setController(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true);//是否系列化类 strategy.setRestControllerStyle(true); // 在官网上,该两行代码为继承公共实体父类和Controller公共父类,但笔者实际开发中没有使用到,故注释掉 // strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity"); // strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); strategy.setSuperEntityColumns("id"); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); // 执行生成 // 打印注入设置【可无】 } public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotEmpty(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } }
直接运行该类中的main方法,输入模块名和表名,点击回车即可生成文件
注意:此处输入模块名和表名后,如果表名的前缀跟模块名相同,则生成的类会自动去掉前缀和下划线,遵循驼峰原则
即:sys_area=>Area;sys_area_name=>AreaName
让我们来看看生成的文件目录:
从xml到controller都自动生成了,点击进入AreaMapper.xml看一看:
里面是空的,什么都没有!
再查看一下mapper和service文件:
里面除了继承了BaseMapper、IService之外也什么代码都没有!
然而这就是MybatisPlus的强大之处了:基础的增删改查功能通过继承都已经整合进去了,让我们写一个controller来试验一下
@RestController @RequestMapping("/sys/area") public class AreaController { @Resource private IAreaService areaService; @GetMapping("/test") public String getAreaList(){ return JSONObject.toJSONString(areaService.list()); } }
启动项目,访问地址,获取数据成功
list()为MybatisPlus众多原生方法的其中一个,其余的方法详见官网。
至此,MybatisPlus的基础配置就已经完成了。下一篇关于MybatisPlus的文章会讲解一下在开发中碰到的一些注意事项以及细节。
- 从零开始配置MybatisPlus(二)
- SpringMVC+Spring+mybatis+redis项目从零开始--redis缓存策略和配置实现
- mybatis-plus-boot的相关配置和使用
- SpringMVC+Spring+mybatis+redis项目从零开始--Springmvc配置实现
- Mybatis-plus简单配置及应用
- SpringMVC+Spring+mybatis+redis项目从零开始--redis缓存策略和配置实现
- java web,从零开始,一步一步配置ssm(Spring+SpringMVC+MyBatis)框架
- Spring 学习系列 -- Spring + Mybatis 从零开始配置多数据源访问
- mybatis_plus配置显示SQL语句配置类及分页查询拦截器
- 项目配置mybatis-plus流程
- 从零开始搭建maven+springmvc+mybatis web项目(2)---springmvc配置文件编写
- spring boot 中 Mybatis plus 多数据源的配置
- JavaWeb项目从零开始(3)--- 集成Mybatis-Plus,简化开发,增强工作效率
- SpringMVC+Spring+mybatis+redis项目从零开始--Spring mybatis mysql配置实现
- SSM项目从零开始到入门011-详解mybatis的XML 映射配置文件
- SpringMVC+Spring+mybatis+redis项目从零开始--Spring mybatis mysql配置实现
- MyBatis-Plus 3.0.3 Sql注入器添加,即全局配置Sql注入器,sqlInjector改写
- Mybatis-Plus代码生成配置
- SpringBoot配置Mybatis-Plus应用
- 【sail】第三篇MybatisPlus的配置以及FreeMarker的配置