SpringBoot Mybatisを統合し、Type Aliasesの設定失敗の問題を解決します。


問題の説明
MyBatisを適用するときは、オブジェクト関係マップを使用して、オブジェクトとAliaseをマッピングします。
Mybatisの文書に明確に書いてありますが、実体類のAliaseを明確に定義していないと、フレームは自動的にClass Nameを別名として登録します。
それでは問題が来ました。java-jar xx.jar&起動を使うと、以下のエラーが発生します。
Error reolving class.Cause:org.apphe.ibatis.type.Type Exception:Could not revove type alias'XXXX'.Cause:java.lassNot FoundException:Canot find class:XXXX
異常情報を見ると、明らかにローカルからalise対応のクラスを検索できなくなり、結局sql Session Factoryなどの初期化に失敗しました。また、レールが吊るされているのは、直接Ideaで起動するのは問題ないです。jarパッケージを起動するとこの問題が発生します。
解決方法
ブロガーA_を参考にしてくださいBeaverの文章は元々mybatisのfacrotyがSpring Boot独特の仮想ファイルシステムをロードしてこそ、クラスパスを識別することができます。

public SpringBootVFS() {
    this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
}
上記のコードから見て、実はPathMatch Resource PatternResolaverを通じて資源のローディングを実現しました。
この問題を修復するにはmybatisの配置類の中にだけfactoryを設置すればいいです。

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setVfs(SpringBootVFS.class);//  SpringBootVFS
        bean.setTypeAliasesPackage("com.fulan.domain.red");
        ...
    }
SpringBoot Mybatisと遭遇したピットを統合します。
1.プロジェクト環境の構築
1.1作成項目
在这里插入图片描述
1.2 POMファイルを修正し、関連付けを追加する
pom.xmlファイルを修正し、下記の依存性を追加します。

<!--Thymeleaf   -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</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>2.1.3</version>
		</dependency>
		<!--jdbc   -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<!--       -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.12</version>
		</dependency>
		<!--Druid     -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.10</version>
		</dependency>
1.3データソースの設定
appication.ymlファイルには次のコードが設定されています。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEnconding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
2.Mavenのgeneratorプラグインを配置する
2.1 generatorプラグイン座標を追加する

<!--  generator  -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.4.0</version>
				<dependencies>
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>8.0.12</version>
					</dependency>
				</dependencies>
				<!--         -->
				<configuration>
					<configurationFile>${project.basedir}/src/main/resources/generator.xml</configurationFile>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
2.2 generatorプロファイルを追加する
ファイルをgenerator.xmlと命名し、src/main/resourceに追加します。

<?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="testTables" targetRuntime="MyBatis3">
            <commentGenerator>
                <!--             true:  : false:  -->
                <property name="suppressAllComments" value="true" />  
            </commentGenerator>
            <!--        :   、    、   、  -->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEnconding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC"
                            userId="root" password="root">
            </jdbcConnection>
            <!--   false, JDBC DECIMAL   NUMERIC       Integer true, JDBC DECIMAL   
                  NUMERIC      java.math.BigDecimal -->  
            <javaTypeResolver>  
                <property name="forceBigDecimals" value="false" />  
            </javaTypeResolver>
            <!--targetProject:  PO    -->
            <javaModelGenerator targetPackage="com.example.springbootmybatis.pojo"
                targetProject=".\src\main\java">
                <!--enableSubPackages:   schema      -->
                <property name="enableSubPackages" value="false" />
                <!--                  -->  
                <property name="trimStrings" value="true" />  
            </javaModelGenerator>
            <!--   mapper.xml   -->  
            <sqlMapGenerator targetPackage="com.example.springbootmybatis.mapper"
                targetProject=".\src\main\java">
                <!--enableSubPackages:   schema      -->
                <property name="enableSubPackages" value="false" />
            </sqlMapGenerator>
            <!--    Mapper      -->  
            <javaClientGenerator type="XMLMAPPER"
                                 targetPackage="com.example.springbootmybatis.mapper" targetProject="./src/main/java">
                <!--enableSubPackages:   schema      -->
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
            <!--        -->
            <table schema="" tableName="users"></table>
            <!--            ,         Example   -->  
<!--            <table tableName="userinfo" domainObjectName="UserInfoPO"  -->
<!--                enableCountByExample="false" enableUpdateByExample="false"  -->
<!--                enableDeleteByExample="false" enableSelectByExample="false"  -->
<!--                selectByExampleQueryId="false">  -->
<!--                <property name="useActualColumnNames" value="false" />  -->
<!--            </table>  -->
        </context>  
    </generatorConfiguration> 
2.3 generatorプロファイルのDMDファイルを追加する
ツールバーのFile->Settingsに追加することもできます。直接ファイルにalt+shiftを押して自動的に追加することもできます。
在这里插入图片描述
2.4 generatorプラグインを実行してコードを生成する
在这里插入图片描述

3.リソースコピープラグインの設定
3.1リソースコピープラグイン座標を追加

<!--        -->
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.yml</include>
				</includes>
			</resource>
		</resources>
3.2起動類の修正@MapperScanコメント

package com.example.springbootmybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.springbootmybatis.mapper")//                
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
4.その他の設定項目

mybatis:
  #   classpath mapper          ,          resources   
  mapper-locations: classpath:/mapper/*.xml
  #      ,  pojo       pojo          
  type-aliases-package: com.example.springbootmybatis.pojo
5.ユーザー機能の追加
5.1ページの作成

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<link rel="shortcut icon" href="../resources/favicon.ico" th:href="@{/static/favion.ico}">
<head>
    <meta charset="UTF-8">
    <title>  SpringBoot  PostgreSQL   </title>
</head>
<body>
    <form th:action="@{/user/addUser}" method="post">
        <input type="text" name="userid"><br>
        <input type="text" name="username"><br>
        <input type="text" name="usersex"><br>
        <input type="submit" value="  "><br>
    </form>
</body>
</html>
5.2 Controllerを作成する
5.2.1 PageController

package com.example.springbootmybatis.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 *     Controller
 */
@Controller
public class PageController {
    /**
     *       
     */
    @RequestMapping("/{page}")
    public String showPage(@PathVariable String page){
        return page;
    }
}
5.2.2 Users Controller

package com.example.springbootmybatis.controller;
import com.example.springbootmybatis.pojo.Users;
import com.example.springbootmybatis.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 *     Controller
 */
@RestController
@RequestMapping("/user")
public class UsersController {
    @Autowired
    private UsersService usersService;
    /**
     *     
     */
    @PostMapping("/addUser")
    public String addUsers(Users users){
        try {
            this.usersService.addUsers(users);
        } catch (Exception e){
            e.printStackTrace();
            return "error";
        }
        return "redirect:/ok";
    }
}
5.3 Serviceインターフェースの実現タイプImplを作成する

/**
 *        
 */
@Service
public class UsersServiceImpl implements UsersService {
    @Autowired
    private UsersMapper usersMapper;
    @Override
    @Transactional
    public void addUsers(Users users) {
        this.usersMapper.insert(users);
    }
}
インターフェース

public interface UsersService {
    void addUsers(Users users);
}
出会うエラー
1.Mybatis Generatorが自動的に生成され、データベースの同名表も生産される問題
[WARNING]Table Configration users matched more than one table(test.users,performance_)schema.users)
[WARNING]Canot obitain prmary key information from the database,generated object may be incomplete
MyBatis Generator公式サイトでこの問題について答えました。

MysqlはSQL catalogsとschemaを正常にサポートできません。したがって、generatorプロファイルにcatalogおよびschemaを指定しないでください。データテーブルの名前を指定して、JDBC URLにデータベースを指定すればいいです。mysql-connector-java 8 xバージョンを使うと、GEneratorはMySql中の情報データベース(sys,information_)になります。schema、performanceschema)の表にコードが生成されます。この操作を避けるには、JDBC URLに「null CatalogMeans Current=true」という属性を入れてください。
プロファイルを変更するgenerator.xml

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEnconding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC"
                        userId="username" password="password">
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
2.ページに500のエラーが発生しました。

在这里插入图片描述
2020-06-27 14:23:424.59 ERROR 19676-[nio-8 8 0-exec-1]o.a.c.C.[.[.[/].[dispacher Servlet]:Servvice()forservlet[dispacherSerServlet]in contexxxxttttttttttpapapadededededededededededededettttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttrs]again.Check your View Reslover setup!Hint:This may be the result of an unspecified view,due to default view name generation.)]with root cause
javax.servlet.Servlet Exception:Circurular view path[addUsers]:would dispatback to the current hander URL[/addUsers]again.Check your View Resolover setup!Hit:This may be the result of an unspecified view,due to default view name generation.)
at org.springframe ewark.web.servlet.view.InternalResource View.prepareForRendering(InternalResource View.java:210)~[spring-webmvc-5.7.RELEASE.jar:5.2.70.REASE]
at
解決方法
多くのブログを調べましたが、自分の問題ではありません。自分の問題はpom.xmlプロファイルのリソースパスの中で、すべてを書いていません。単独のxmlとymlプロファイルです。すべての静的リソースをロードします。

<!--   -->
<!--       -->
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.yml</include>
                    <include>**/*.xml</include>
				</includes>
				<!-- <filtering>false</filtering>-->
			</resource>
<!--    -->
<!--       -->
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.*</include>
				</includes>
				<!-- <filtering>false</filtering>-->
			</resource>
以上は個人の経験ですので、参考にしていただければと思います。