在平常開發中,數據持久技術使用的架子使用頻率最高的有3個,即spring-jdbc , spring-jpa, spring-mybatis.詳情能夠看我以前的一篇文章spring操做數據庫的3個架子 .html
spring-jdbc封裝的比較少,須要在代碼中拼接sql,不太適合大規模的企業級別的開發。
spring-jpa封裝略多,適合開發後臺管理類的系統,能夠減小大量重複工做。java
可是在當下的互聯網大環境下,spring-mybatis既帶來了開發的便捷性,也不失靈活性,特別適合性能要求高,能夠靈活改變的場景。本篇文章大體回顧一下基於springboot的mybatis的配置開發要點以及基於maven插件的代碼自動生成。mysql
hello, springboot集成mybatis以及代碼生成器!git
springboot集成Mybatis有大把的文章,不過若是撇開別人的觀點,你以爲從0開始配置,應該有哪幾個步驟呢?github
我以爲大體分爲以下幾個要點:web
- 引入依賴,數據庫驅動,mybatis的starter;
- 配置數據庫鏈接信息,鏈接池信息;
- 配置mybatis的核心配置信息;好比entity位置,執行器類型,xml的位置;
- 配置springboot的Mybatis註解,主要是開啓支持,而後是mapper的地址;
- 測試啓動成功:能夠放到健康檢查裏面去作;
springboot集成Mybatis的關鍵步驟:
下面跟我一塊兒來一步一步集成springboot:sql
使用spring initializr建立項目,引入以下依賴:數據庫
依賴說明以下:json
數據源使用springboot默認自帶的hikari數據源;
配置以下:
數據庫鏈接信息
spring.datasource.url=jdbc:mysql://10.19.174.11:3306/demo_datasource spring.datasource.username=lxdev spring.datasource.password=db@LX4devtmp123 spring.datasource.type=com.zaxxer.hikari.HikariDataSource
數據鏈接池配置信息
spring.datasource.hikari.pool-name=demo_mybatis_and_plugin_pool spring.datasource.hikari.maximum-pool-size=5 spring.datasource.hikari.allow-pool-suspension=false
mybatis主要是配置mapper-locations,type-alias-package,以及駝峯對應關係,執行器的類型等;
#mybatis配置 mybatis.mapper-locations=classpath:com/springbootpractice/demo/mybatis/plugin/dao/xml/*.xml mybatis.type-aliases-package=com.springbootpractice.demo.mybatis.plugin.dao.entity mybatis.executor-type=reuse mybatis.configuration.map-underscore-to-camel-case=true mybatis.configuration.cache-enabled=true mybatis.lazy-initialization=true
告訴應用程序mapper接口所在的包位置,以及標識註解。
package com.springbootpractice.demo.mybatis.plugin; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.stereotype.Repository; @SpringBootApplication @MapperScan(annotationClass = Repository.class, basePackages = "com.springbootpractice.demo.mybatis.plugin.dao.mapper") public class DemoMybatisAndPluginApplication { public static void main(String[] args) { SpringApplication.run(DemoMybatisAndPluginApplication.class, args); } }
首先配置好actuator,開放health端點;
#ops配置 management.endpoints.web.exposure.include=* management.endpoints.enabled-by-default=false management.endpoint.health.enabled=true management.endpoint.health.show-details=always
啓動程序, curl http://localhost:8080/actuator/health/db
能夠檢查數據庫的鏈接狀態,正常返回結果以下:
{ status: "UP", details:- { database: "MySQL", result: 1, validationQuery: "/* ping */ SELECT 1" } }
至此,springboot集成mybatis的步驟完成了。可是一些模板代碼,須要記憶嗎?記憶起來很痛苦應該。因此,咱們還應該配置一下mybatis的代碼生成插件,生成好一些經常使用的代碼,而後在生成的代碼的基礎上添加一些本身的持久化的mapper方法,提供給業務層調用。
代碼生成器,mybatis官網有介紹。配置分爲插件配置和生成配置。本文主要經過maven的插件來進行常規的代碼生成。
主要使用的是maven插件,配置以下:主要是須要配置生成代碼配置文件的位置;
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <configuration> <configurationFile>${project.basedir}/src/main/resources/generateConfig.xml</configurationFile> <verbose>false</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency> <dependency> <groupId>com.itfsw</groupId> <artifactId>mybatis-generator-plugin</artifactId> <version>1.3.8</version> </dependency> </dependencies> </plugin>
配置要點以下:
主要配置幾個生成代碼的位置,mapper,entity,example,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> <properties resource="jdbc.properties"></properties> <context defaultModelType="flat" id="Mysql" targetRuntime="MyBatis3"> <property name="endingDelimiter" value="`"/> <property name="beginningDelimiter" value="`"/> <property name="javaFileEncoding" value="UTF-8"/> <property name="autoDelimitKeywords" value="true"/> <!-- 自定義註釋插件 --> <plugin type="com.itfsw.mybatis.generator.plugins.CommentPlugin"> <!-- 自定義模板路徑 --> <property name="template" value="src/main/resources/comment.ftl"/> </plugin> <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin"> <!-- @Data 默認開啓,同時插件會對子類自動附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) --> <property name="@Data" value="true"/> <!-- @Builder 必須在 Lombok 版本 >= 1.18.2 的狀況下開啓,對存在繼承關係的類自動替換成@SuperBuilder --> <property name="@Builder" value="true"/> <!-- @NoArgsConstructor 和 @AllArgsConstructor 使用規則和Lombok一致 --> <property name="@AllArgsConstructor" value="true"/> <property name="@NoArgsConstructor" value="true"/> <!-- @Getter、@Setter、@Accessors 等使用規則參見官方文檔 --> <property name="@Accessors(chain = true)" value="false"/> <!-- 臨時解決IDEA工具對@SuperBuilder的不支持問題,開啓後(默認未開啓)插件在遇到@SuperBuilder註解時會調用ModelBuilderPlugin來生成相應的builder代碼 --> <property name="supportSuperBuilderForIdea" value="false"/> </plugin> <!-- Mapper註解插件 --> <plugin type="com.itfsw.mybatis.generator.plugins.MapperAnnotationPlugin"> <!-- @Mapper 默認開啓 --> <property name="@Mapper" value="false"/> <!-- @Repository 默認關閉,開啓後解決IDEA工具@Autowired報錯 --> <property name="@Repository" value="true"/> </plugin> <!-- MySQL分頁插件 --> <plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin"> <!-- 經過配置startPage影響Example中的page方法開始分頁的頁碼,默認分頁從0開始 --> <property name="startPage" value="1"/> </plugin> <plugin type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin"> <!-- 修改Example類生成到目標包下 --> <property name="targetPackage" value="${code.base.package}.example"/> </plugin> <!-- 狀態枚舉生成插件 --> <plugin type="com.itfsw.mybatis.generator.plugins.EnumTypeStatusPlugin"> <!-- 是否開啓自動掃描根據約定註釋格式生成枚舉,默認true 註釋[success(0):成功, fail(1):失敗]--> <property name="autoScan" value="true"/> </plugin> <!-- 邏輯刪除插件 --> <plugin type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin"> <!-- 這裏配置的是全局邏輯刪除列和邏輯刪除值,固然在table中配置的值會覆蓋該全局配置 --> <!-- 邏輯刪除列類型只能爲數字、字符串或者布爾類型 --> <property name="logicalDeleteColumn" value="deleted"/> <!-- 邏輯刪除-已刪除值 --> <property name="logicalDeleteValue" value="1"/> <!-- 邏輯刪除-未刪除值 --> <property name="logicalUnDeleteValue" value="0"/> <!-- 是否生成邏輯刪除常量(只有開啓時 logicalDeleteConstName、logicalUnDeleteConstName 才生效) --> <property name="enableLogicalDeleteConst" value="true"/> <!-- 邏輯刪除常量名稱,不配置默認爲 IS_DELETED --> <property name="logicalDeleteConstName" value="IS_DELETED"/> <!-- 邏輯刪除常量(未刪除)名稱,不配置默認爲 NOT_DELETED --> <property name="logicalUnDeleteConstName" value="NOT_DELETED"/> </plugin> <jdbcConnection connectionURL="${spring.datasource.url}" driverClass="${spring.datasource.driver-class-name}" password="${spring.datasource.password}" userId="${spring.datasource.username}"/> <javaTypeResolver> <property name="forceBigDecimals" value="true"/> <property name="useJSR310Types" value="true"/> </javaTypeResolver> <javaModelGenerator targetPackage="${code.base.package}.entity" targetProject="src/main/java"> <property name="trimStrings" value="true"/> <property name="enableSubPackages" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="${code.base.package}.xml" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator targetPackage="${code.base.package}.mapper" targetProject="src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table domainObjectName="UserLoginExtEntity" tableName="user_login_ext" enableDeleteByExample="false" enableDeleteByPrimaryKey="false"> <generatedKey column="id" identity="true" sqlStatement="MySql"/> </table> </context> </generatorConfiguration>
此外,還把兩個信息配置外部化了。
jdbc.properties : 主要配置數據鏈接信息,父包名;
spring.datasource.url=jdbc:mysql://10.19.174.11:3306/demo_datasource spring.datasource.username=lxdev spring.datasource.password=db@LX4devtmp123 spring.datasource.driver-class-name=com.mysql.jdbc.Driver code.base.package=com.springbootpractice.demo.mybatis.plugin.dao
comment.ftl 配置了註釋生成的格式;
<?xml version="1.0" encoding="UTF-8"?> <template> <comment ID="addJavaFileComment"></comment> <comment ID="addComment"></comment> <comment ID="addRootComment"></comment> <comment ID="addFieldComment"><![CDATA[ <#if introspectedColumn??> /** <#if introspectedColumn.remarks?? && introspectedColumn.remarks != ''> <#list introspectedColumn.remarks?split("\n") as remark> * ${remark} 對應數據庫表字段: ${introspectedTable.fullyQualifiedTable}.${introspectedColumn.actualColumnName} </#list> </#if> */ <#else> </#if> ]]></comment> <comment ID="addModelClassComment"><![CDATA[ /** * @author: carter * 對應數據庫表: ${introspectedTable.fullyQualifiedTable} */ ]]></comment> <comment ID="addClassComment"></comment> <comment ID="addEnumComment"></comment> <comment ID="addInterfaceComment"></comment> <comment ID="addGetterComment"></comment> <comment ID="addSetterComment"></comment> <comment ID="addGeneralMethodComment"></comment> </template>
經過本篇文章你能夠學到以下內容:
springboot集成mybatis,配置好代碼生成插件以後,就能夠有大把時間專一於業務邏輯的開發,快速的完成研發工做,有大把的時間下班回去陪娃了。該demo能夠用於生產環境,通過產品試驗。放心使用,拿走不謝!
無論你有沒有收穫,美女仍是要送的,最近在追劇,猜猜看這個美女是誰?雞腿仙女送給你。
原創不易,轉載請註明出處。