Heim >Java >javaLernprogramm >Wie SpringBoot das Problem des TypeAliases-Konfigurationsfehlers löst
Verwenden Sie bei der Anwendung von MyBatis die objektrelationale Zuordnung, um Objekte und Aliase abzubilden.
In der Mybatis-Dokumentation steht eindeutig, dass das Framework automatisch den Klassennamen als Alias verwendet, wenn Sie den Alias der Entitätsklasse nicht klar definieren.
Dann tritt das Problem auf. Beim Starten mit java -jar xxx.jar& wird der folgende Fehler gemeldet:
LösungSiehe den Artikel von Blogger A_Beaver. Es stellt sich heraus, dass die Fabrik von Mybatis das einzigartige virtuelle Dateisystem von SpringBoot laden muss. Um den Klassenpfad zu identifizierenFehler beim Auflösen der Klasse ".Ursache: java.lang.ClassNotFoundException: Klasse kann nicht gefunden werden: . Darüber hinaus gibt es kein Problem, wenn Sie direkt in Idea starten.
public SpringBootVFS() { this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader()); }
@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 integriert Mybatis und Begegnungen mit Pit 1. Richten Sie die Projektumgebung ein
1.2 Ändern Sie die POM-Datei und fügen Sie relevante Abhängigkeiten hinzu
Ändern Sie die Datei pom.xml und fügen Sie die folgenden Abhängigkeiten hinzu .
<!--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 Datenquelle konfigurieren
Konfigurieren Sie den folgenden Code in der Datei 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.DruidDataSource2. Konfigurieren Sie das Maven-Generator-Plug-in /Ressourcen.
<!--配置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>
Sie kann unter Datei->Einstellungen in der Symbolleiste hinzugefügt werden, oder sie kann automatisch durch Drücken von Alt+Umschalt direkt in der Datei hinzugefügt werden.
2.4 Führen Sie das Generator-Plug-in aus, um den Code zu generieren.
3 .2 Ändern Sie die Startklasse und fügen Sie die @MapperScan-Anmerkung hinzu
<?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>4. Andere Konfigurationselemente
<!--配置资源拷贝插件--> <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>5.1 Seite erstellen
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); } }
5.2 .1 PageControllermybatis:
# 扫描classpath中mapper目录下的映射配置文件,针对于映射文件放到了resources目录下
mapper-locations: classpath:/mapper/*.xml
# 定义包别名,使用pojo时可以直接使用pojo的类型名称不用加包名
type-aliases-package: com.example.springbootmybatis.pojo
5.2.2 UsersController
<!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.3 Serviceschnittstellen-Implementierungsklasse erstellen Impl
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; } }Interface
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"; } }
1. Mybatis Generator wird automatisch generiert und die Datenbanktabelle mit demselben Namen wird erstellt werden auch generiert
[WARNUNG] Tabellenkonfigurationsbenutzer stimmten mit mehr als einer Tabelle überein (test..users,performance_schema..users)[WARNUNG] Primärschlüsselinformationen können nicht aus der Datenbank abgerufen werden, generierte Objekte sind möglicherweise unvollständig
Die Übersetzung lautet wie folgt: MySQL kann SQL-Kataloge und -Schemas nicht ordnungsgemäß unterstützen. Daher ist es am besten, Katalog und Schema nicht in der Generatorkonfigurationsdatei anzugeben, sondern nur den Namen der Datentabelle und die Datenbank in der JDBC-URL anzugeben. Wenn Sie die Version mysql-connector-java 8.x verwenden, generiert der Generator Code für die Tabellen der Informationsdatenbank (sys, information_schema, performance_schema) in MySql. Um diesen Vorgang zu vermeiden, fügen Sie bitte das Attribut „nullCatalogMeansCurrent=true“ hinzu. zur JDBC-URL.
Ändern Sie die Konfigurationsdatei generator.xml
/** * 用户管理业务层 */ @Service public class UsersServiceImpl implements UsersService { @Autowired private UsersMapper usersMapper; @Override @Transactional public void addUsers(Users users) { this.usersMapper.insert(users); } }2. Auf der Seite wird ein 500-Fehler angezeigt
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>
Das obige ist der detaillierte Inhalt vonWie SpringBoot das Problem des TypeAliases-Konfigurationsfehlers löst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!