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/viboot/)或者碼雲(https://gitee.com/yw18530069930/viboot)上進行下載,後續的例子都會同步更新。