Lors de l'application de MyBatis, utilisez le mappage objet-relationnel pour mapper les objets et Aliase.
Il est clairement écrit dans la documentation Mybatis que si vous ne définissez pas clairement l'Alias de la classe d'entité, le framework utilisera automatiquement le Class Name comme alias.
Ensuite, voici le problème. Lors de l'utilisation de java -jar xxx.jar& pour démarrer, l'erreur suivante sera signalée,
Erreur lors de la résolution de la classe. org .apache.ibatis.type.TypeException : impossible de résoudre l'alias de type "XXXXX". Il est évident que la classe correspondant à alise ne peut pas être récupérée localement, et finalement l'initialisation de sqlSessionFactory et ainsi de suite échoue. De plus, il n'y a aucun problème à démarrer le rail directement dans Idea. Ce problème ne se produira qu'au démarrage du package jar. Le système de mybatis doit charger le système de fichiers virtuel unique de SpringBoot pour identifier le chemin de classe
#🎜🎜. #À partir du code ci-dessus, le chargement des ressources est en fait implémenté via PathMatchingResourcePatternResolverpublic SpringBootVFS() { this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader()); }Copier après la connexion
La résolution de ce problème nécessite uniquement Vous devez définir l'usine dans la classe de configuration de mybatis,
@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"); ... }
1 Construire l'environnement du projet
#🎜 🎜#1.1 Créer un projet
#🎜 🎜#Modifiez le fichier pom.xml et ajoutez-y les dépendances suivantes. <!--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>
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.1 Ajouter les coordonnées du plugin du générateur
<!--配置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>
Nommez le fichier generator.xml et ajoutez-le à 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>
Peut être ajouté dans Fichier->Paramètres dans la barre d'outils, ou directement Appuyez sur alt+shift pour l'ajouter automatiquement au fichier.
2.4 Exécutez le plug-in générateur pour générer du code
3.1 Configurer le plug-in de copie de ressources
3.1 Ajouter un plug-in de copie de ressources- dans les coordonnées#🎜 🎜#
<!--配置资源拷贝插件--> <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 Modifiez la classe de démarrage et ajoutez l'annotation @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
<!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 . 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; } }
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"; } }
/** * 用户管理业务层 */ @Service public class UsersServiceImpl implements UsersService { @Autowired private UsersMapper usersMapper; @Override @Transactional public void addUsers(Users users) { this.usersMapper.insert(users); } }
Interface# 🎜🎜#
public interface UsersService { void addUsers(Users users); }
[AVERTISSEMENT] Les utilisateurs de la configuration de table correspondent à plusieurs tables (test..users,performance_schema..users)
[AVERTISSEMENT] Impossible d'obtenir la clé primaire informations de la base de données, les objets générés peuvent être incomplets# 🎜🎜#
a répondu à cette question sur le site officiel de MyBatis Generator.La traduction est la suivante : Mysql ne peut pas prendre en charge correctement les catalogues et les schémas SQL. Par conséquent, il est préférable de ne pas spécifier de catalogue et de schéma dans le fichier de configuration du générateur, mais simplement de spécifier le nom de la table de données et de spécifier la base de données dans l'URL JDBC. Si vous utilisez la version mysql-connector-java 8.x, le générateur générera du code pour les tables de la base de données d'informations (sys, information_schema, performance_schema) dans MySql. Pour éviter cette opération, veuillez ajouter l'attribut "nullCatalogMeansCurrent=true". à l'URL JDBC.
<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>
2 Une erreur 500 apparaît sur la page
#. 🎜🎜## 🎜🎜#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>Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!