Mybatis-Plus是在Mybatis的基础上,国人开发的一款持久层框架。html
而且荣获了2018年度开源中国最受欢迎的中国软件TOP5java
一样以简化开发为宗旨的Spring Boot
与Mybatis-Plus
放在一块儿会产生什么样的化学反应呢?下面咱们来领略一下二者配合带来的效率上的提高。mysql
能够看到,它给咱们提供了一些核心的功能:代码生成器和现成的CRUD接口以及能够结合Lambda
的条件构造器使咱们的代码变得足够优雅,分页的使用也是至关的方便,以及提供了不一样的主键生成策略。
若是这些功能不能知足咱们的需求,Mybatis-Plus
还提供了丰富的插件供咱们去使用,咱们接下来只讲核心功能,插件的使用会在后面的文章中进行部分的讲解,感兴趣的同窗能够先去看一下官方的文档。git
首先咱们须要引入POM,我在这里引用的是最新版本的:github
接着,若是咱们须要使用代码生成器,须要引入模板引擎的依赖:sql
到此,pom的引入就告一段落,下面咱们来看一下配置文件的编写:api
这里咱们使用的是application.yml
做为配置文件,而非新建Spring Boot
项目默认的application.properties
,这里若是不会新建一个Spring Boot
项目,能够去参考本系列教程的第一篇文章mybatis
在这里能够进行打印SQL的配置,便于咱们进行排查问题。app
直接贴出个人代码生成器代码:框架
public class MpGenerator { public static void main(String[] args) { GlobalConfig config = new GlobalConfig(); String dbUrl = "jdbc:mysql://localhost:3306/viboot?useSSL=false"; DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL) .setUrl(dbUrl) .setUsername("root") .setPassword("Passw0rd") .setDriverName("com.mysql.cj.jdbc.Driver"); StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig .setCapitalMode(true) //这里结合了Lombok,因此设置为true,若是没有集成Lombok,能够设置为false .setEntityLombokModel(true) .setNaming(NamingStrategy.underline_to_camel); //这里由于我是多模块项目,因此须要加上子模块的名称,以便直接生成到该目录下,若是是单模块项目,能够将后面的去掉 String projectPath = System.getProperty("user.dir") + "/viboot-mybatis-plus"; // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { } }; // 若是模板引擎是 freemarker String templatePath = "/templates/mapper.xml.ftl"; // 若是模板引擎是 velocity // String templatePath = "/templates/mapper.xml.vm"; // 自定义输出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 return projectPath + "/src/main/resources/mapper/" + "user" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); //设置做者,输出路径,是否重写等属性 config.setActiveRecord(false) .setEnableCache(false) .setAuthor("viyoung") .setOutputDir(projectPath + "/src/main/java") .setFileOverride(true) .setServiceName("%sService"); new AutoGenerator() .setGlobalConfig(config) .setDataSource(dataSourceConfig) .setStrategy(strategyConfig) .setTemplateEngine(new FreemarkerTemplateEngine()) .setCfg(cfg) //这里进行包名的设置 .setPackageInfo( new PackageConfig() .setParent("indi.viyoung.viboot.mybatis") .setController("controller") .setEntity("entity") .setMapper("mapper") .setServiceImpl("service.impl") .setService("service") ).execute(); } }
下面咱们来运行main方法,就能够看到生成的包:
将mapper
包下面xml
包删掉,由于咱们已经在resources
中生成了*mapper.xml
文件。
这里须要注意,须要在SpringBoot的启动类上配置MapperScan
来帮助咱们去找到持久层接口的位置。
没错,咱们只须要写一行代码就能够获取到咱们想要的列表,下面咱们来访问一下
有些人可能会好奇,为何咱们只须要在controller
层中直接去调用就能够得到到列表,这是由于Mybatis-Plus
给咱们封装了一系列的CRUD的基础接口,在经过代码生成器生成的UserService
接口其实是继承了IService
接口的,而UserServiceImpl
则是继承ServiceImpl
,因此就能够获取到一些基础的实现。
而IService
则给咱们提供了如下方法来实现基础的CRUD:
一样的,BaseMapper
接口也提供了一些实现:
经过这些基础的实现,咱们能够完成平常中大部分的基础查询,而省去了编写Service和ServiceImpl的时间,从编码效率上来说比起JPA更胜一筹。
条件构造器能够构造一些查询条件来获取咱们指定的值,同时能够结合Lambda表达式来使用,下面咱们直接来编写两个例子:
能够看到,被注释掉的部分是不使用Lambda表达式的写法,这样的写法存在魔法值,并且会因为粗心写错column的名称而致使错误,可是使用Lambda表达式就足够直观的能够看出咱们是想查询出userName = ?
的数据,下面,咱们来运行一下,看看结果是否符合咱们预期的那样
固然,条件构造器的用法还有许许多多,这里就不在一一罗列,有须要的同窗能够去官网查看文档
若是咱们须要分页查询数据去渲染表格,可使用Mybatis-Plus
自带的分页插件:
在启动类中加入上面的代码,而后咱们就能够去使用分页了:
咱们只须要构建一个Page
对象,并初始化咱们所需的页数(page)和每页数据量(pageSize),而后将其做为page()
方法的参数传入便可
下面,咱们来访问一下:
至此,咱们的Mybatis-Plus
就告一段落了,谢谢您的耐心阅读,但愿您有所收获~
原创文章,文笔有限,才疏学浅,文中如有不正之处,万望告知。
源码能够去github(https://github.com/viyog/vibo... 或者码云(https://gitee.com/yw185300699... )上进行下载,后续的例子都会同步更新。