|
Mybatis-generatorhtml |
通用Mapperjava |
Mybatis-Plusmysql |
代碼生成器git |
支持自動生成Model,Mapper,Mapper XML文件github 生成方式不夠靈活;spring 生成代碼功能較爲簡單sql |
支持自動生成Entity,Mapper,Mapper XML文件;數據庫 提供通用的Mapper模板,生成方式較靈活;apache 生成的Model文件包含註釋可以很好地與數據庫表完成映射springboot |
支持自動生成Entity,Mapper,Mapper XML,Service,Controller文件; 提供BaseMapper接口 |
CRUD操做 |
代碼生成後每一個Mapper有固定的CRUD方法; 在每一個Mapper上分別擴展 |
提供通用Mapper接口;方便構造統一service 能夠擴展通用接口 |
提供BaseMapper接口; 能夠擴展通用接口 |
條件構造器 |
每一個實體類本身的Example構造條件【對象方式】 |
提供通用Example【構建sql】 |
提供Wrapper進行復雜條件構造 |
樂觀鎖 |
|
支持 |
支持 |
主鍵策略 |
|
支持 |
支持 |
分頁 |
|
|
支持 |
邏輯刪除 |
|
|
支持 |
通用枚舉 |
|
|
支持 |
攻擊Sql阻斷 |
|
|
支持 |
性能分析 |
|
|
支持 |
通用Mapper是對Mybatis-generator的升級改造,解決了使用Mybatis-generator可能須要大量重構的問題,而且在這個基礎上加入了一些新的功能。
Mybatis-Plus能夠看做是在另外一個方向上對Mybatis的升級改造,不只可以根據數據庫錶快速生成pojo實體類,還封裝了大量CRUD方法,使用Wrapper解決了複雜條件構造等問題,更是根據開發中常見的問題給出了一系列解決方案。
在擁有Maven和Spring boot的開發框架下,MBG、通用Mapper和MP均可以快速地完成安裝,相比於MBG和通用Mapper僅須要執行插件就能夠完成基本的開發工做,MP可能須要更多的開發工做量。
最佳實踐參看代碼:https://github.com/bjlhx15/java_base_architecture.git
MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代碼生成器。它爲全部版本的MyBatis以及版本2.2.0以後的iBATIS版本生成代碼。它將根據數據庫表生成可用於訪問表的文件。
Mybatis-generator主要完成的工做是依據數據庫表建立對應的model、dao、mapping文件,能夠經過Maven插件或者mybatis-generator的jar包生成。
這裏介紹Maven插件使用方法:
一、在pom.xml文件中加入mybatis-generator系列插件;
二、建立generatorConfig.xml文件,在配置文件中指定數據庫鏈接地址、生成類的存放地址、生成對應表的類名等信息;
三、執行mybatis-generator插件,便可生成相應文件;
四、此外,mybatis-generator自動生成了example類用於構造複雜的篩選條件
Mybatis-generator使用較爲簡單,生成的DAO類及映射文件中包含基本的CRUD操做。
須要注意的是,在一次項目中屢次執行mybatis-generator,xml文件會追加,會覆蓋本來的Model、DAO;可使用以下方式
一、每次清理要生成的xml
二、自動生成的寫入auto,
三、我的擴展的使用上圖方式
能夠參看上述github代碼
官網:https://github.com/abel533/Mapper/wiki
當數據庫字段變化頻繁時,使用MBG(mybatis-generator)會帶來大量的重構工做,對此,通用Mapper給出的解決辦法是:給予開發者一個具有豐富的單表方法而且容易擴展的通用的Mapper。
通用Mapper是對單表的CRUD操做進行了較爲詳細的實現,使得開發人員能夠隨意的按照本身的需求選擇通用的方法,同時容許開發人員便捷地對通用Mapper進行擴展。
1. 在pom.xml中添加插件配置
<!-- 命令:mvn mybatis-generator:generate --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <!-- 配置實際調用地址--> <configurationFile>src/main/resources/mybatis_generatorConfig/generatorConfig-base.xml </configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.0.0</version> </dependency> </dependencies> </plugin>
能夠看到,通用Mapper的代碼生成其實是使用了MGB,所以通用Mapper的代碼生成器只是調用了MGB,而後在這個基礎上加入了一些元素來方便開發。
2. 配置文件generatorConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration> <!--導入屬性配置,前面咱們寫的一個配置文件,你也能夠直接使用mybatis的jdbc的配置文件 --> <properties resource="jdbc.properties"></properties> <!-- 數據庫驅動,注意,這裏必需要修改爲你的數據庫的驅動地址 --> <!-- 若是 pom配置這裏能夠不寫--> <!-- <classPathEntry location=".m2/repository/mysql/mysql-connector-java/5.1.8/mysql-connector-java-5.1.8.jar"/>--> <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/> <property name="caseSensitive" value="true"/> </plugin> <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 --> <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"> </jdbcConnection> <!-- <javaTypeResolver>--> <!-- <property name="forceBigDecimals" value="false"/>--> <!-- </javaTypeResolver>--> <!-- targetProject:生成PO類的位置 --> <javaModelGenerator targetPackage="com.github.bjlhx15.mybatis.springboot.base.model.auto" targetProject="../tk-mybatis-springboot-base1/src/main/java"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false"/> <!-- 從數據庫返回的值被清理先後的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- targetProject:mapper xml 映射文件生成的位置 --> <sqlMapGenerator targetPackage="autoxml" targetProject="../tk-mybatis-springboot-base1/src/main/resources/mapper/"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!--targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.github.bjlhx15.mybatis.springboot.base.repository.auto" targetProject="../tk-mybatis-springboot-base1/src/main/java"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 指定數據庫表 --> <table tableName="accountbalance" domainObjectName="AccountBalance"> <generatedKey column="id" sqlStatement="JDBC"/> </table> </context> </generatorConfiguration>
與MGB原有的配置文件相比,這裏只是多了一個插件的配置,這個插件的做用是:配置生成的Mapper接口都會自動繼承這個接口,也就是說,使用通用Mapper生成的mapper接口即便看上去空空如也,但已經具有了大量的對數據庫的操做方法。此外,通用 Mapper 專用代碼生成器生成的 Model 會在原有基礎上增長 @Table,@Id,@Column 等註解,方便自動與數據庫字段進行映射。
3. 在 pom.xml 這一級目錄的命令行窗口執行 mvn mybatis-generator:generate或者直接在執行mvn插件便可。
4. 通用Mapper一樣有Example的設計,與MGB不一樣的是,MDB會對每個表生成對應的Example類,而通用Mapper提供了一個統一的Example類,這個類和 MBG 生成的相比,須要本身設置屬性名,這個類還額外提供了更多的方法。
通用Mapper能夠看做是MGB的改進和擴展,必定程度上解決了使用MGB重構的問題。
能夠參看上述github代碼
官網地址:https://mp.baomidou.com/guide/generator.html
(如下簡稱MP)是Mybatis的加強工具(MBG和通用Mapper可當作插件),在Mybatis的基礎上增長了不少功能,簡化開發,提升效率。
在Spring Boot中的引入:
1. 在maven中添加MP啓動器
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.2</version> </dependency>
2. 要使用代碼生成器還須要添加模板引擎依賴
參看地址:AutoGenerator的使用參考 https://mybatis.plus/guide/generator.html 。
添加 模板引擎 依賴,MyBatis-Plus 支持 Velocity(默認)、Freemarker、Beetl,用戶能夠選擇本身熟悉的模板引擎,若是都不知足您的要求,能夠採用自定義模板引擎。
Velocity(默認):
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.1</version> </dependency>
Freemarker:
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.29</version> </dependency>
Beetl:
<dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl</artifactId> <version>3.0.11.RELEASE</version> </dependency>
注意!若是您選擇了非默認引擎,須要在 AutoGenerator 中 設置模板引擎。
AutoGenerator generator = new AutoGenerator(); // set freemarker engine generator.setTemplateEngine(new FreemarkerTemplateEngine()); // set beetl engine generator.setTemplateEngine(new BeetlTemplateEngine()); // set custom engine (reference class is your custom engine class) generator.setTemplateEngine(new CustomTemplateEngine()); // other config ...
三、代碼的自動生成。AutoGenerator是MP的代碼生成器,經過調用AutoGenerator,進行相應的模板、策略配置能夠快速生成Entity、Mapper、Mapper XML、Service、Controller各個模塊的代碼。
4. MP將通用的CRUD操做封裝進BaseMapper接口,而自動生成的Mapper接口便自動繼承了BaseMapper接口。複雜的Sql操做,則可使用QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper)進行動態Sql拼接。
五、此外,MP還支持分頁、邏輯刪除、通用枚舉、Sql注入等功能,在:https://mp.baomidou.com/guide/generator.html
還有性能分析插件:https://mp.baomidou.com/guide/performance-analysis-plugin.html
與MBG不一樣,使用Mybatis-Plus自動生成代碼須要編寫代碼,經過調用AutoAutoGenerator類實現代碼生成,從這方面來講不如使用插件方便。可是它豐富的功能以及只是相對複雜的配置仍是使它領先於MBG以及通用Mapper。
雙方都