springboot整合mybatis,利用mybatis-genetor自動生成文件
項目結構:
xxjava
實現思路:
1.添加依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.bo</groupId>
<artifactId>bookdb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bookdb</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.mybatis.generator</groupId>-->
<!-- <artifactId>mybatis-generator-core</artifactId>-->
<!-- <version>1.3.5</version>-->
<!-- </dependency>-->
<!-- <!–MyBatis-Jar包–>-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis</groupId>-->
<!-- <artifactId>mybatis</artifactId>-->
<!-- <version>3.4.2</version>-->
<!-- </dependency>-->
<!-- <!–MyBatis 整合Spring適配包–>-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis</groupId>-->
<!-- <artifactId>mybatis-spring</artifactId>-->
<!-- <version>1.3.1</version>-->
<!-- </dependency>-->
<!-- ********************************************** -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!--容許移動生成的文件 -->
<verbose>true</verbose>
<!-- 是否覆蓋 -->
<overwrite>true</overwrite>
<!-- 自動生成的配置文件路徑。啓動插件時,插件會根據這裏配置的路徑去找到generatorConfig.xml配置文件,
根據配置文件裏的配置,去自動生成Mapper接口(能夠理解爲Dao層)、實體類、Mapper.xml文件
-->
<configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.配置application.properties
server.port=8888
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/bookdb?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
#映射到dao層(即mapper生成的位置)
mybatis.type-aliases-package=com.bo.bookdb.dao
#mapper.xml文件生成位置
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
3.配置generatorConfig.xml(基本照搬,注意倒數第三個標籤:<table>,裏面對應數據庫的表名)
<?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="application.properties"/>
<!--defaultModelType="flat" 大數據字段,不分表 -->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="utf-8"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 註釋 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/><!-- 是否取消註釋 -->
<property name="suppressDate" value="true"/> <!-- 是否生成註釋代時間戳-->
</commentGenerator>
<!--數據庫連接地址帳號密碼,這裏是讀取application.properties配置文件的。
若是你的項目配置文件用的是yml格式的,則以下寫法是讀取不到,需手動填寫完整
-->
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>
<!-- 類型轉換 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, false可自動轉化如下類型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成Model類存放位置,即實體類存放路徑 -->
<javaModelGenerator targetPackage="com.bo.bookdb.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapper.xml文件,mapper.xml存放路徑 -->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 生成mapper.xml對應得接口,也就是dao層 -->
<javaClientGenerator targetPackage="com.bo.bookdb.dao" targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--如下就是需自動生成mapper.xml文件等表,配置哪些表,就自動生成哪些表那些文件。-->
<table tableName="book" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
<table tableName="user" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
</context>
</generatorConfiguration>
4.點擊Maven-->Plugins-->mybatis-generator-->mybatis-generator:generator
最後右擊Run Maven Build,如此會生成對應的dao,entity,以及mapper.xml
若是error,多是mybatis-generator-maven-plugin和mybatis-generator-core版本不一致
我一開始就是版本沒寫一致,結果報錯
5.將dao層裏面的mapper類增長@Mapper,以便映射xml文件
6.添加server層
和dao添加同樣的方法,只不過方法名不一樣
7.增長實現類Impl @Service
繼承對應的mapper接口,內置對應dao的對象。
8.編輯測試類 @ResrController
內置實現類的對象
編寫一個用於測試的方法,@PostMapping設置一個對外接口
9.啓動類
@MapperScan(basePackages = "com.bo.bookdb.dao")
啓動的時候,自動掃描mapper接口
意外狀況
若是實現類沒法自動建立bean,可考慮如下狀況
(1)上面步驟的第六步,繼承mapper接口,內置dao對象
(2)Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.
這個多是路徑問題,或者是缺乏依賴,固然我寫的實例沒有用到,大家可能用到,在這說一下
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
(3)若是是最後Caused by:...................xml
這個比較坑,我當時自動建立完mapper.xml以後,裏面的相同內容居然複製了n份
致使有不少相同id,只留一份就行了其它的全刪。
實現圖片
github源碼:
https://github.com/hgt-8080/bookdb
後期補充:
後來發現generator生成的文件有點問題,可能須要對一些文件的屬性作些修改,整體上問題不大,改改就行了!!!