1. 程式人生 > >spring boot 學習筆記(第二天)spring boot整合mybatis

spring boot 學習筆記(第二天)spring boot整合mybatis

1.spring boot整合mybatis

1.在pom檔案中新增mybatis依賴(如果在建立專案時已經勾選了mybatis選項,就不用新增mybatis-spring-boot-starter了)

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.3.2</version>

</dependency>

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.13</version>

</dependency>

2.在application.properties中新增mybatis配置項

#mybatis start

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/peopleinfo?useUnicode=true&charsetEncoding=utf8

spring.datasource.name=root

spring.datasource.password=root

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#mybatis end

2.使用generator自動生成pojo類和資料庫mapping

a. 自己建立資料庫和資料表

b.在resources目錄下建立genertorConfig.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">

<!-- 第二種mybatis逆向生成xml配置 -->

<generatorConfiguration>

<!-- 需要指明資料庫聯結器的絕對路徑 -->

<classPathEntry

location="D:\AddFile\idea\ideaWork\TestDemo\lib\mysql-connector-java-5.1.39-bin.jar"/>

<context id="sqlserverTables" targetRuntime="MyBatis3">

<!-- 生成的pojo,將implements Serializable-->

<!-- <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>-->

<commentGenerator>

<!-- <property name="suppressDate" value="true"/>-->

<!-- 是否去除自動生成的註釋 true:是 : false:否 -->

<property name="suppressAllComments" value="true" />

</commentGenerator>

<!-- 資料庫連結URL、使用者名稱、密碼 -->

<jdbcConnection driverClass="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://127.0.0.1:3306/peopleInfo"

userId="root"

password="root">

</jdbcConnection> <!--

預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer

true,把JDBC DECIMAL 和 NUMERIC 型別解析為java.math.BigDecimal

-->

<javaTypeResolver>

<property name="forceBigDecimals" value="false" />

</javaTypeResolver>

<!--

生成model模型,對應的包路徑,以及檔案存放路徑(targetProject),targetProject可以指定具體的路徑,如./src/main/java,

也可以使用“MAVEN”來自動生成,這樣生成的程式碼會在target/generatord-source目錄下

--> <!--<javaModelGenerator targetPackage="com.forezp.entity" targetProject="MAVEN">-->

<javaModelGenerator targetPackage="com.htc.demo.entity" targetProject="src/main/java">

<property name="enableSubPackages" value="true"/>

<!-- 從資料庫返回的值被清理前後的空格 -->

<property name="trimStrings" value="true" />

</javaModelGenerator>

<!--對應的mapper.xml檔案 -->

<sqlMapGenerator targetPackage="mybatis" targetProject="src/main/resources">

<property name="enableSubPackages" value="true"/>

</sqlMapGenerator>

<!-- 對應的Mapper介面類檔案 -->

<javaClientGenerator type="XMLMAPPER" targetPackage="com.htc.demo.mapper" targetProject="src/main/java">

<property name="enableSubPackages" value="true"/>

</javaClientGenerator>

<!-- 列出要生成程式碼的所有表,這裡配置的是不生成Example檔案 -->

<table tableName="uinfo"

domainObjectName="UserInfo"

enableCountByExample="false"

enableUpdateByExample="false"

enableDeleteByExample="false"

enableSelectByExample="false"

selectByExampleQueryId="false" >

<property name="useActualColumnNames" value="false"/>

</table>

<table tableName="password"

domainObjectName="Password"

enableCountByExample="false"

enableUpdateByExample="false"

enableDeleteByExample="false"

enableSelectByExample="false"

selectByExampleQueryId="false" >

<property name="useActualColumnNames" value="false"/>

</table>

</context>

</generatorConfiguration>

c.在pom檔案中新增generator外掛

<!--mybatis自動生成程式碼外掛-->

<plugin>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>1.3.5</version>

<dependencies>

<dependency>

<groupId> mysql</groupId>

<artifactId> mysql-connector-java</artifactId>

<version> 5.1.39</version>

</dependency>

<dependency>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-core</artifactId>

<version>1.3.5</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>

<!-- 自動生成的配置 -->

<configurationFile>src\main\resources\generator\genertorConfig.xml</configurationFile>

</configuration>

</plugin>

注意:自動生成的配置是剛剛寫的generatorConfig.xml

點選mavenProject 選擇到mybatis-generator雙擊執行。如果沒錯的話就會在相應的路徑上新增檔案了。

-------------------------------------------雷區警戒線--------------------------------------------

坑1:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver一直飄紅報錯

填坑:

註釋掉pom檔案中mysql-connector-java scope為 runtime的依賴,它與你新增的那個依賴有jar包衝突。


<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

坑2:

The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

填坑:

時區錯誤,真的是大千世界無奇不有。。。。。。

是問題還是得解決的,本著對未知世界的敬畏,網上什麼改mysql的時區就算了,直接來一個簡單的,在你的地址後邊新增這麼一句:?serverTimezone=GMT%2B8 問題就解決了。

就像這樣:

jdbc:mysql://127.0.0.1:3306/peopleInfo?serverTimezone=GMT%2B8&useUnicode=true&charsetEncoding=utf8

坑3:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mainController': Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceImp': Unsatisfied dependency expressed through field 'passwordMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'passwordMapper' defined in file [D:\AddFile\idea\ideaWork\TestDemo\target\classes\com\htc\demo\mapper\PasswordMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

填坑:

此坑出處頗多,由於已經解決了許久,忘了,所以只找出這麼一個原因:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

在建立專案時,系統的啟動項上,會預設新增這個,但是有時候可能會出點小亂子,把括號裡的東西全刪了,也許就好了。(原因大概是它會自動使用專案自帶的資料來源配置,再進去我也說不清了)

坑4:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

填坑:

其實這個算不上坑,因為前邊把啟動項的東西刪掉了,所以這個驅動是不完整的,根據提示使用“com.mysql.cj.jdbc.Driver”就好了,有些人可能找不到這個驅動,應該是缺少這個jar包。(jar包版本要高點,我另一個專案的jar是5.1的,似乎沒得這個驅動)

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.13</version>

</dependency>

坑5:

大概意思就是找不到mapper,然後報一大堆錯。

填坑:

1.看看是不是配置了對映路徑:

mybatis.mapper-locations=classpath:mybatis/*.xml

mybatis.type-aliases-package=com.htc.demo.mapper

2.看看啟動項是不是有配置(其實可以在呼叫mapper的地方寫這個,但是啟動項就不用每一個都去配置了)

@MapperScan(value = "com.htc.demo.mapper")

3.mapper是不是添加了@component。

--------------------------------------------------------------我不是系統的生產者,我只是bug的搬運工------------------------