Rumah > Java > javaTutorial > teks badan

Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases

WBOY
Lepaskan: 2023-05-16 12:22:11
ke hadapan
1695 orang telah melayarinya

Penerangan Masalah

Apabila menggunakan MyBatis, gunakan pemetaan hubungan objek untuk memetakan objek dan Aliase.

Ia jelas tertulis dalam dokumentasi Mybatis bahawa jika anda tidak mentakrifkan Aliase kelas entiti dengan jelas, rangka kerja akan menggunakan Nama Kelas secara automatik sebagai alias.

Masalahnya ialah, apabila menggunakan java -jar xxx.jar& untuk memulakan, ralat berikut akan dilaporkan,

Ralat menyelesaikan kelas Punca: org.apache.ibatis. type.TypeException: Tidak dapat menyelesaikan jenis alias "XXXXX". Punca: java.lang.ClassNotFoundException: Tidak dapat mencari kelas: XXXXX

Daripada maklumat pengecualian, jelas sekali bahawa alise yang sepadan tidak boleh diambil kelas tempatan, dan akhirnya menyebabkan kegagalan permulaan sqlSessionFactory dan sebagainya. Lebih-lebih lagi, tiada masalah dengan rel gantung Tidak ada masalah untuk memulakannya secara langsung Masalah ini hanya akan berlaku apabila memulakan pakej balang

Penyelesaian

Rujuk artikel tentang. blogger A_Beaver. Ternyata bahawa facroty mybatis memerlukan Hanya dengan memuatkan sistem fail maya unik SpringBoot boleh laluan kelas dikenal pasti

public SpringBootVFS() {
    this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
}
Salin selepas log masuk

Daripada kod di atas, pemuatan sumber sebenarnya dilaksanakan melalui PathMatchingResourcePatternResolver

Untuk menyelesaikan masalah ini, anda hanya perlu mengkonfigurasi kelas konfigurasi mybatis Hanya sediakan kilang,

@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");
        ...
    }
Salin selepas log masuk

SpringBoot menyepadukan Mybatis dan perangkap yang dihadapi

1 🎜>

1.1 Cipta projek

Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases

1.2 Ubah suai fail POM dan tambah kebergantungan yang berkaitan

Ubah suai fail pom.xml dan tambah kebergantungan berikut.

<!--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>
Salin selepas log masuk

1.3 Konfigurasikan sumber data

Konfigurasikan kod berikut dalam fail 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
Salin selepas log masuk

2. Konfigurasikan pemalam penjana Maven

2.1 Tambah koordinat pemalam penjana

<!--配置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>
Salin selepas log masuk

2.2 Tambah fail konfigurasi penjana

Namakan fail generator.xml dan tambahkannya pada 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&characterEnconding=utf-8&useSSL=false&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>
Salin selepas log masuk

2.3 Tambah fail DTD bagi fail konfigurasi penjana

Anda boleh menambahnya dalam Tetapan Fail-> dalam bar alat, atau anda boleh menekan alt+ terus dalam anjakan fail ditambah secara automatik.


Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases

2.4 Jalankan pemalam penjana untuk menjana kod

Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases

Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases

3. Konfigurasikan pemalam salinan sumber

3.1 Tambah koordinat pemalam salinan sumber

<!--配置资源拷贝插件-->
 <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>
Salin selepas log masuk

3.2 Ubah suai kelas permulaan untuk menambah anotasi @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);
 }
}
Salin selepas log masuk

4 item konfigurasi lain

mybatis:
  # 扫描classpath中mapper目录下的映射配置文件,针对于映射文件放到了resources目录下
  mapper-locations: classpath:/mapper/*.xml
  # 定义包别名,使用pojo时可以直接使用pojo的类型名称不用加包名
  type-aliases-package: com.example.springbootmybatis.pojo
Salin selepas log masuk

5. Tambah fungsi pengguna

5.1 Cipta halaman

<!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>
Salin selepas log masuk

5.2 Cipta Pengawal

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;
    }
}
Salin selepas log masuk

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";
    }
}
Salin selepas log masuk

5.3 Cipta Kelas pelaksanaan antara muka Perkhidmatan Impl

/**
 * 用户管理业务层
 */
@Service
public class UsersServiceImpl implements UsersService {
    @Autowired
    private UsersMapper usersMapper;
    @Override
    @Transactional
    public void addUsers(Users users) {
        this.usersMapper.insert(users);
    }
}
Salin selepas log masuk

Antaramuka

public interface UsersService {
    void addUsers(Users users);
}
Salin selepas log masuk

Ralat yang dihadapi

1 Mybatis Generator dijana secara automatik, dan jadual pangkalan data dengan nama yang sama juga akan dijana

.

[AMARAN] Pengguna Konfigurasi Jadual memadankan lebih daripada satu jadual (ujian..pengguna,skema_prestasi..pengguna)


[AMARAN] Tidak boleh mendapatkan maklumat kunci utama daripada pangkalan data, dijana objek mungkin tidak lengkap


Soalan ini terjawab di laman web rasmi MyBatis Generator.

Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases

Terjemahan adalah seperti berikut: Mysql tidak boleh menyokong katalog dan skema SQL dengan betul. Oleh itu, adalah lebih baik untuk tidak menyatakan katalog dan skema dalam fail konfigurasi penjana, hanya nyatakan nama jadual data dan nyatakan pangkalan data dalam URL JDBC. Jika anda menggunakan versi mysql-connector-java 8.x, penjana akan menjana kod untuk jadual pangkalan data maklumat (sys, information_schema, performance_schema) dalam MySql Untuk mengelakkan operasi ini, sila tambah atribut "nullCatalogMeansCurrent=true". ke URL JDBC.

Ubah suai penjana fail konfigurasi.xml

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEnconding=utf-8&useSSL=false&serverTimezone=UTC"
                        userId="username" password="password">
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
Salin selepas log masuk

2 Ralat 500 muncul pada halaman

Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases

Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi 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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana SpringBoot menyelesaikan masalah kegagalan konfigurasi TypeAliases. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan