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的搬運工------------------------