近來著手將本年Java項目開發所涉及到的知識點做一個梳理,之前是在他人搭建框架基礎上做的功能開發,其實很多不經意間的配置都是有講究的,不親自爬坑總歸霧里看花
首先使用IDEA自帶的SpringBoot構建web項目,勾選mysql+mybaits插件,此時直接啟動就會提示數據庫不存在報錯,就得在application.propertitis或者application.yml配置文件中配置數據庫連接
spring:
datasource:
name: suzhou_loupan
url: jdbc:mysql://localhost:3306/suzhou_loupan
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver #mysql-connector-java高于6.0版本的統一加上cj否則報錯#
type: com.alibaba.druid.pool.DruidDataSource #這里使用druid數據庫管理池#
mybatis:
mapper-locations: classpath:mappers/*.xml #mybatis的xml文件目錄#
#下面日志配置控制臺打印SQL執行語句#
logging:
level:
com.myJavaShop.dao: debug #前面的路徑是項目dao目錄#
但是實際項目開發時若是實體類都是手寫的未免太過費事,引入mybatis-generator自動生成實體類,但是若是僅僅引入mybatis-generator生成的xml文件會生成諸多不必要的單表增刪改查,而且生成的實體類注釋也是反人類,網上更多是建議新建項目重寫mybatis-generator的注釋生成方法并打包jar包作為擴展類引入,其實只要再引入tk.mybatis,隱性自帶單表增刪改查,代碼清爽而且自帶修改注釋。
pom.xml配置文件引入tk.mybatis和mybatis-generator依賴,并整合啟動指令到idea中Maven的plugins里面
<dependencies>
<!--利用mybatis-generator自動生成代碼-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
<!--下面按需添加IDEA的maven的plugins快捷啟動方式 -->
<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.18</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-generator -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>mybatis generator</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<!--為避免反復生成-->
<configuration>
<!--允許移動生成的文件-->
<verbose>true</verbose>
<!--允許自動覆蓋-->
<overwrite>true</overwrite>
<configurationFile>
src/main/resources/mybatis-generator.xml
</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
mybatis-generator.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>
<!--導入屬性配置-->
<!-- context 是逆向工程的主要配置信息 -->
<!-- id:起個名字 -->
<!-- targetRuntime:設置生成的文件適用于那個 mybatis 版本 -->
<context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 生成的Java文件的編碼 -->
<property name="javaFileEncoding" value="UTF-8"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 格式化java代碼 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化XML代碼 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<!-- 整合lombock,參考方式https://github.com/GuoGuiRong/mybatis-generator-lombok-plugin 暫時不整合-->
<!-- <plugin type="org.mybatis.generator.plugins.LombokPlugin" >-->
<!-- <property name="hasLombok" value="true"/>-->
<!-- </plugin>-->
<!-- 配置 tk.mybatis 插件 這邊value指向mybatis通用接口 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
</plugin>
<!--optional,旨在創建class時,對注釋進行控制-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自動生成的注釋 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
<!-- 是否帶上注釋-->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--jdbc的數據庫連接-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/suzhou_loupan?useInformationSchema=true&useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC"
userId="root"
password="123456">
</jdbcConnection>
<!--非必須,類型處理器,在數據庫類型和java類型之間的轉換控制-->
<javaTypeResolver>
<!-- 默認情況下數據庫中的 decimal,bigInt 在 Java 對應是 sql 下的 BigDecimal 類 -->
<!-- 不是 double 和 long 類型 -->
<!-- 使用常用的基本類型代替 sql 包下的引用類型 -->
<property name="forceBigDecimals" value="false"/>
<!--時間戳生成字段類型避免是Java.util.Date-->
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<!-- targetPackage:生成的實體類所在的包 -->
<!-- targetProject:生成的實體類所在的硬盤位置 -->
<javaModelGenerator targetPackage="com.myJavaShop.domain.entity"
targetProject="src/main/java">
<!-- 是否允許子包 -->
<property name="enableSubPackages" value="false"/>
<!-- 是否對modal添加構造函數 -->
<property name="constructorBased" value="true"/>
<!-- 是否清理從數據庫中查詢出的字符串左右兩邊的空白字符 -->
<property name="trimStrings" value="true"/>
<!-- 建立modal對象是否不可改變 即生成的modal對象不會有setter方法,只有構造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
<sqlMapGenerator targetPackage="mappers"
targetProject="src/main/resources">
<!-- 針對數據庫的一個配置,是否把 schema 作為字包名 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!--生成dao類存放位置-->
<!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.myJavaShop.dao" targetProject="src/main/java">
<!-- 針對 oracle 數據庫的一個配置,是否把 schema 作為字包名 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--生成表及類名-->
<table tableName="employee_info"></table>
</context>
</generatorConfiguration>
tk.mybatis引入SpringBoot中還需要在啟動類上增加tk的@MapperScan("com.myJavaShop.dao")
package com.myJavaShop;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@MapperScan("com.myJavaShop.dao")
@SpringBootApplication
public class ShopApplication {
public static void main(String[] args) {
SpringApplication.run(ShopApplication.class, args);
}
}
如此這般配置完成后,便可以在IDEA中點擊生成代碼了
IDEA點擊自動生成mybatis
下面是Dao層,實體類以及mybatis的xml生成展示,其中可以看到Dao層因為在mybatis-generator.xml中用<plugin>標簽引入了tk.mybatis的接口,此處生成的Dao層會自動繼承tk的Mapper,于是便可以不添一行代碼使用所有單表操作
Dao層
下面是實體類生成展示,可以看到注釋已經變成常規中文注釋了
實體類
下面是mybatis的xml生成展示,很清爽,而且<table>標簽不再需要配置一堆如enableDeleteByPrimaryKey="false"的屬性了,因為引入tk.mybatis后就沒必要再生成那些單表的增刪改查了
xml
推薦相關鏈接
1.Mybatis Generator官網文檔
2.Mybatis Generator配置詳解
3.tk.Mybatis使用說明