中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用SpringBoot解決TypeAliases配置失敗問題

發布時間:2023-05-17 16:58:00 來源:億速云 閱讀:161 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“如何使用SpringBoot解決TypeAliases配置失敗問題”,內容詳細,步驟清晰,細節處理妥當,希望這篇“如何使用SpringBoot解決TypeAliases配置失敗問題”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

問題描述

在應用MyBatis時,使用對象關系映射,將對象和Aliase映射起來。

在Mybatis的文檔明確寫出,如果你沒有明確定義實體類的Aliase,框架會自動將Class Name自動作為別名。

那么問題來了,當使用java -jar xxx.jar&啟動的時候,會報出以下錯誤,

Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias "XXXXX".Cause: java.lang.ClassNotFoundException: Cannot find class: XXXXX

從異常信息來看,明顯就是無法從本地檢索到alise對應的類,并最終導致sqlSessionFactory等初始化失敗。而且吊軌的是,直接在Idea中啟動是沒有問題的,啟動jar包才會出現這個問題

解決方法

原來mybatis的facroty需要加載SpringBoot獨特的虛擬文件系統,才能識別類路徑

public SpringBootVFS() {
    this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
}

從以上代碼看,其實是通過PathMatchingResourcePatternResolver實現資源的加載

修復該問題只需要在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 創建項目

如何使用SpringBoot解決TypeAliases配置失敗問題

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 配置數據源

在application.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/resources中添加。

<?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=".srcmainjava">
                <!--enableSubPackages:是否讓schema作為包的后綴-->
                <property name="enableSubPackages" value="false" />
                <!-- 從數據庫返回的值被清理前后的空格 -->  
                <property name="trimStrings" value="true" />  
            </javaModelGenerator>
            <!--對應的mapper.xml文件 -->  
            <sqlMapGenerator targetPackage="com.example.springbootmybatis.mapper"
                targetProject=".srcmainjava">
                <!--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配置文件的DTD文件

可以在工具欄中的File->Settings中添加,也可以直接在文件中按alt+shift自動添加。


如何使用SpringBoot解決TypeAliases配置失敗問題

2.4 運行generator插件生成代碼

如何使用SpringBoot解決TypeAliases配置失敗問題

如何使用SpringBoot解決TypeAliases配置失敗問題

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 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 UsersController

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 Configuration users matched more than one table (test..users,performance_schema..users)

[WARNING] Cannot obtain primary key information from the database, generated objects may be incomplete

在 MyBatis Generator官網 中對這一問題做出了解答。

如何使用SpringBoot解決TypeAliases配置失敗問題

翻譯如下:Mysql 無法正常支持 SQL catalogs 和 schema。因此,最好不要在 generator 配置文件中指定 catalog 以及schema,僅需指定數據表的名字并在 JDBC URL 中指定數據庫即可。如果使用 mysql-connector-java 8.x 版本,generator 會為MySql中信息數據庫(sys, information_schema, performance_schema)的表生成代碼,若要避免這種操作,請在 JDBC URL 中加入屬性“nullCatalogMeansCurrent=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錯誤

如何使用SpringBoot解決TypeAliases配置失敗問題

如何使用SpringBoot解決TypeAliases配置失敗問題

2020-06-27 14:23:42.459 ERROR 19676 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [addUsers]: would dispatch back to the current handler URL [/addUsers] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause

javax.servlet.ServletException: Circular view path [addUsers]: would dispatch back to the current handler URL [/addUsers] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:210) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
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>

讀到這里,這篇“如何使用SpringBoot解決TypeAliases配置失敗問題”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

承德市| 苍南县| 泾源县| 南漳县| 宝清县| 嘉义县| 公主岭市| 苗栗市| 东辽县| 隆德县| 阿克陶县| 武乡县| 浮梁县| 托克托县| 长治市| 曲周县| 遵义县| 郎溪县| 和田市| 颍上县| 秦安县| 南安市| 西贡区| 奉化市| 景洪市| 柞水县| 陈巴尔虎旗| 玉林市| 竹北市| 清原| 阿克陶县| 军事| 克东县| 泰顺县| 讷河市| 长垣县| 岳阳县| 赣榆县| 大悟县| 肇东市| 罗城|