在Matrix-Web项目中使用Mybatis-Plus作为操作数据库的ORM框架。在市面上常用的ORM框架有hibernetes、mybatis、JPA等,那么为什么选择Mybatis-Plus呢?主要基于以下方面考虑:

  • 兼容Mybatis,可以轻松写出很复杂的sql和业务逻辑。^_^

  • 简单、容易上手,单表操作不需要写mybatis的xml,代码自动生成,可以实现快速开发。

  • 基于Mybatis,和Mybatis完全兼容,和Mybatis相比,此框架无性能损耗(号称成为 MyBatis 最好的搭档)

  • Mybatis-Plus符合国人开发习惯

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

Mybatis特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库

  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

Mybatis的结构如下:

以上部分来源于官网。

Mybatis-Plus代码生成

Myatis-Pluss是在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。符合本项目快速开发后端管理系统的宗旨。Mybatis-Plus提供了生成代码的插件,能够读取数据库里面的表,生成对应的实体类、Mapper类、写SQL的xml、Service类等,其中Mapper类和Service类具有操作单表CRUD能力,不需要额外写Sql语句。对于复杂的多表操作,还是需要写SQL语句。

sql语句准备

在数据库areis中,准备以下的sys_user表的数据,如下:


DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户编号',`user_id` varchar(50) NOT NULL COMMENT '用户名',`password` varchar(80) NOT NULL COMMENT '密码,需加密存储',`realname` varchar(20) DEFAULT NULL COMMENT '真实姓名',`type` tinyint(3) DEFAULT '0' COMMENT '类型,1管理员 2.员工 3.普通用户',`mobile` varchar(30) DEFAULT NULL COMMENT '手机号',`email` varchar(50) DEFAULT NULL COMMENT '邮箱',`remarks` varchar(255) DEFAULT NULL COMMENT '备注',`status` tinyint(1) DEFAULT '1' COMMENT '0停用1启用2锁定',`avatar` varchar(255) DEFAULT NULL COMMENT '用户头像',`create_time` datetime DEFAULT NULL COMMENT '注册时间',`create_by` varchar(50) DEFAULT NULL COMMENT '创建人id',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`update_by` varchar(50) DEFAULT NULL COMMENT '更新人',`sex` int(2) DEFAULT '1',PRIMARY KEY (`id`),KEY `USERNAME_IDX` (`user_id`),KEY `REALNAME_IDX` (`realname`),KEY `idx_mobile` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户';

添加生成代码的依赖

Matrix-Web项目的代码生成模块为matrix-gen-code。在工程的pom文件加上代码生成的相关依赖,包括连接数据库依赖mysql-connector-java、代码生成模块mybatis-plus-generator、模板引擎依赖,代码如下:

   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.1.2</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.1</version></dependency>

生成代码逻辑

Mybatis-Plus生成代码的逻辑比较简单,直接贴出源码,不再讲解。


public class MysqlGenerator {public static String[] tableNames={"sys_user"};public static String packageName="io.github.forezp.modules.system";/*** RUN THIS*/public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();// 全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/generator-code/src/main/java");gc.setAuthor("forezp");gc.setOpen(false);gc.setDateType(DateType.ONLY_DATE);gc.setFileOverride(true);gc.setBaseColumnList(true);gc.setBaseResultMap(true);gc.setServiceName("%sService");mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://127.0.0.1:3306/aries?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT");// dsc.setSchemaName("public");dsc.setDriverName("com.mysql.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("123456");mpg.setDataSource(dsc);// 包配置sPackageConfig pc = new PackageConfig();
//        pc.setModuleName(scanner("模块名"));pc.setParent(packageName);pc.setController("controller");pc.setEntity("entity");mpg.setPackageInfo(pc);// 自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};List<FileOutConfig> focList = new ArrayList<>();focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输入文件名称return projectPath + "/generator-code/src/main/resources/mapper/" + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);mpg.setTemplate(new TemplateConfig().setXml(null));// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setSuperEntityClass("io.github.forezp.common.base.BaseEntity");strategy.setEntityLombokModel(true);strategy.setCapitalMode(true);strategy.setEntitySerialVersionUID(true);strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setInclude(tableNames);//修改替换成你需要的表名,多个表名传数组// strategy.setSuperControllerClass("io.github.forezp.modules.common.BaseController");strategy.setSuperEntityColumns("id", "create_by", "create_time", "update_by", "update_time");strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName() + "_");mpg.setStrategy(strategy);// 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();}
}

运行上面代码的Main方法,生成了实体类SysUser、SysUserMapper、SysUserService、SysUserServiceImpl、SysUserMapper.xml、SysUserController,代码就不再这里展示。

1

Spring Boot集成Mybatis-Plus

在Matrix-Web的后端代码模块matrix-web-backend,matrix-web-backend为Spring Boot工程,现在来讲解如何在Spring Boot中引入Mybatis-Plus。需要说明的是Matrix-Web后端采用Sharding-Jdbc、Druid、Mybatis-Plus三个组件作为操作数据库的框架,本篇文章之讲述如何Spring Boot集成Mybatis-Plus,后面的文章会讲述Sharding-Jdbc和Druid。

在工程的pom文件引入Mybatis-Plus的起步依赖,版本为3.1.2,代码如下:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.spring.boot.version}</version>
</dependency>

在工程的配置文件appliaction.yml做mybatis-plus的相关配置,其中datasource为数据源,mapper-locations配置的是在存放mapper.xml的位置,typeAliasesPackage配置实体类的包地址,还有其他配置,具体看代码注释。全部配置如下:

mybatis-plus:datasource: dataSourcemapper-locations: classpath:/mapper/*Mapper.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: io.github.forezp.modules.system.entitytypeEnumsPackage: io.github.forezp.modules.system.entity.enumsglobal-config:db-config:id-type: id_workercapital-mode: true#主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";id-type: 2#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"field-strategy: 2#驼峰下划线转换db-column-underline: true#刷新mapper 调试神器refresh-mapper: true#数据库大写下划线转换#capital-mode: true#序列接口实现类配置#key-generator: com.baomidou.springboot.xxx#逻辑删除配置logic-delete-value: 0logic-not-delete-value: 1#自定义填充策略接口实现
#    meta-object-handler: com.baomidou.springboot.xxx#自定义SQL注入器#sql-injector: com.baomidou.springboot.xxxconfiguration:map-underscore-to-camel-case: truecache-enabled: falselog-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在springBoot工程的启动文件SpringBootServletInitializer配置Mybtis的MapperScan的包名,配置了就会自动扫描Mapper,并注入到spring ioc容器里面。代码如下:

@SpringBootApplication
@MapperScan({"io.github.forezp.modules.system.mapper"     ,"io.github.forezp.modules.task.mapper","io.github.forezp.modules.activiti.mapper","io.github.forezp.modules.personnel.mapper"})
public class AriesApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(AriesApplication.class, args);}
}

将上一小节自动生成的代码,SysUser、SysUserMapper、SysUserService、SysUserServiceImpl、SysUserMapper.xml、SysUserController,放在相关的包下面,启动SpringBoot工程。这样Spring Boot整合mybatis-plus就整合好了。

总结

这篇文章主要讲述了如何使用Mybatis-Plus生成代码,然后讲解如何在Spring Boot中整合使用Mybatis-Plus。下篇文章将讲述如何使用Mybatis-Plus的自动填充功能和分页功能。

参加资料:

https://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A7

源码下载

https://github.com/forezp/matrix-web

往期文章:

跟我学Springboot开发后端管理系统1:概述

跟我学Springboot开发后端管理系统2:Mybatis-Plus实战相关推荐

  1. 跟我学Springboot开发后端管理系统3:Mybatis-Plus实战2

    在上一篇文章讲述了如何使用Mybatis-plus自动生成代码,生成的代码具有单表操作数据库的能力,节约了开发时间.然后讲述了如何在Spring Boot中整合Mybatis-Plus.这篇文章讲述如 ...

  2. mybatis plus springboot test_跟我学Springboot开发后端管理系统3:Mybatis-Plus实战2

    文章来源:https://mp.weixin.qq.com/s/YL0FDjn8BczNfIJJ9DgMRA 原文作者:forezp 来源平台:微信公众号 在上一篇文章讲述了如何使用Mybatis-p ...

  3. 跟我学Springboot开发后端管理系统9:AOP+logback+MDC日志输出

    MDC介绍 在比较复杂的应用中,一个请求需要走很多个方法的处理,怎么样才能快速查找一个请求的全部日志呢.在分布式系统中,我们可以用链路追踪,比如zipkin.skywalking去快速查找日志,从而定 ...

  4. 跟我学Springboot开发后端管理系统8:Matrxi-Web权限设计实现

    上篇文章讲述了Matrix-web整体实现的权限控制的思路.现在来回顾一下: 首先,用户需要登录,填用户名.密码,后端接收到登录请求,进行用户.密码的校验,校验成功后则根据用户名生成Token,并返回 ...

  5. 跟我学Springboot开发后端管理系统7:Matrxi-Web权限设计

    Matrxi-Web权限设计 对于一个后端系统来说,权限是基础设施,是安全保障.没有权限,系统可能随时面临各种风险,所以权限设计对后端系统来说至关重要.在Javaweb开发中,有很多权限开发的框架,比 ...

  6. 跟我学Springboot开发后端管理系统6:缓存框架Caffeine

    Caffeine是一个基于Java8的高性能缓存框架,号称趋于完美.Caffeine受启发于Guava Cache的API,使用API和Guava是一致的.它借鉴了Guava Cache和Concur ...

  7. 跟我学Springboot开发后端管理系统5:数据库读写分离

    在Matrix-web后台管理系统中,使用到了数据库的读写分离技术.采用的开源的Sharding-JDBC作为数据库读写分离的框架.Matrix-Web后台数据库这一块采用的技术栈如下: 使用Myba ...

  8. 跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP

    上一篇文章主要讲解了如何再Matrix-Web中使用Mybatis-Plus,Mybatis-Plus作为Orm框架,连接数据库需要连接数据库的依赖.WEB 系统高并发环境下,频繁的进行数据库连接操作 ...

  9. 跟我学Springboot开发后端管理系统8:AOP+logback+MDC日志输出

    MDC介绍 在比较复杂的应用中,一个请求需要走很多个方法的处理,怎么样才能快速查找一个请求的全部日志呢.在分布式系统中,我们可以用链路追踪,比如zipkin.skywalking去快速查找日志,从而定 ...

最新文章

  1. UVA11624 Fire!(bfs)
  2. Python和Flask真强大:不能错过的15篇技术热文(转载)
  3. 计算机制图的平行投影,工程制图与计算机辅助设计课件-20210406204806.ppt-原创力文档...
  4. Python使用pandas合并多个Excel文件
  5. 王牌战争服务器维护怎么解除,王牌战争文明重启怎么解除root权限 root权限解除方法...
  6. dqn在训练过程中loss越来越大_强化学习笔记:OpenAI Gym+DQN+Tensorflow2实现
  7. 微端服务器物品备注,GOM引擎定制功能可视化仓库+物品备注脚本
  8. 局域网 服务器禁止共享文件夹,一键设置局域网共享文件夹权限,禁止他人打印...
  9. html当前时间插件,HTML日期时间插件
  10. C语言实现扫雷游戏(详解)
  11. 20211104 为什么相似矩阵的迹相同
  12. 计算机右键管理删除,win10系统删除右键菜单中“管理我的手机”的处理方法
  13. python科研作图系列-01热力图相关性分析
  14. 如何将 MPG 转换为 MP4
  15. 华东师范大学张凯教授课题组招收图神经网络方向博士生
  16. 全球及中国电子级无水氟化氢发展动态与未来需求趋势预测报告2021~2026年
  17. DataSource和SessionFactory的区别
  18. app营销变现系统,让你的app更值钱!
  19. python可以开发手机AAP吗?kivy说可以
  20. 从键盘上输入任意个任意字母,统计元音字母 a、e、i、o、u 共出现多少次。

热门文章

  1. javascript中 (function(){})();如何理解?
  2. C#ListView控件添加Checkbox复选框并获取选中的数目,检查checkbox是否勾选
  3. 背单词:3年,34150分钟!
  4. 【青少年编程(第27周)】报名考级的小朋友注意截止时间!
  5. 迟语寒:组队学习的那些事
  6. 技术图文:Numpy 一维数组 VS. Pandas Series
  7. 刻意练习:LeetCode实战 -- Task18. 正则表达式匹配
  8. 【PAT (Basic Level) 】1025 反转链表 (25 分)
  9. Python 到底该怎么学才好?你关心的答案来了
  10. 深度盘点Python11个主流框架:Pandas、Django、Matplotlib、Numpy、PyTorch......