MyBatis를 적용할 때 객체 관계형 매핑을 사용하여 객체와 Aliase를 매핑합니다.
엔터티 클래스의 별칭을 명확하게 정의하지 않으면 프레임워크가 자동으로 클래스 이름을 별칭으로 사용한다고 Mybatis 문서에 명확하게 기록되어 있습니다.
그러면 문제가 발생합니다. java -jar xxx.jar&로 시작하면 다음 오류가 보고됩니다.
Error resolving class. 원인: org.apache.ibatis.type.TypeException: 유형 별칭 " XXXXX를 확인할 수 없습니다. ".원인: java.lang.ClassNotFoundException: 클래스를 찾을 수 없음: XXXXX
예외 정보로 볼 때 alise에 해당하는 클래스를 로컬에서 검색할 수 없는 것이 분명하며 이로 인해 궁극적으로 sqlSessionFactory의 초기화 실패 등이 발생합니다. . 게다가 Idea에서 직접 시작해도 문제가 없습니다. 이 문제는 jar 패키지를 시작할 때만 발생합니다.
블로거 A_Beaver의 기사를 참조하면 mybatis의 기능은 SpringBoot의 고유한 가상 파일 시스템을 로드해야 한다는 것이 밝혀졌습니다. 클래스 경로를 식별하려면
public SpringBootVFS() { this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader()); }
위 코드에서 실제로 리소스 로딩은 PathMatchingResourcePatternResolver를 통해 구현됩니다
이 문제를 해결하려면 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.1 프로젝트 생성
1.2 POM 파일 수정 및 관련 종속성 추가
pom.xml 파일을 수정하고 다음 종속성을 추가합니다. .
org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.3 org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 8.0.12 com.alibaba druid 1.1.10
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.1 생성기 플러그인 좌표 추가
org.mybatis.generator mybatis-generator-maven-plugin 1.4.0 mysql mysql-connector-java 8.0.12 ${project.basedir}/src/main/resources/generator.xml true true
2.2 생성기 구성 파일 추가
파일 이름을 Generator.xml로 지정하고 src/main에 추가하세요. /자원.
2.3 생성기 구성 파일의 DTD 파일을 추가합니다
툴바의 파일->설정에서 추가하거나 파일에서 직접 Alt+Shift를 눌러 자동으로 추가할 수 있습니다.
2.4 생성기 플러그인을 실행하여 코드 생성
3.1 리소스 복사 플러그인 좌표 추가
src/main/java **/*.xml src/main/resources **/*.yml
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); } }
mybatis: # 扫描classpath中mapper目录下的映射配置文件,针对于映射文件放到了resources目录下 mapper-locations: classpath:/mapper/*.xml # 定义包别名,使用pojo时可以直接使用pojo的类型名称不用加包名 type-aliases-package: com.example.springbootmybatis.pojo
5.1 페이지 만들기
5.2 컨트롤러 만들기
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 서비스 인터페이스 구현 클래스 생성 Impl
/** * 用户管理业务层 */ @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); }
1. Mybatis Generator가 자동으로 생성되고, 동일한 이름의 데이터베이스 테이블이 생성됩니다. 도 생성됩니다
[경고] 테이블 구성 사용자가 둘 이상의 테이블(test..users,performance_schema..users)과 일치합니다
[경고] 데이터베이스에서 기본 키 정보를 얻을 수 없습니다. 생성된 객체가 불완전할 수 있습니다
이 질문에 대한 답변은 MyBatis Generator 공식 웹사이트에 있습니다.
번역은 다음과 같습니다. MySQL은 SQL 카탈로그 및 스키마를 제대로 지원할 수 없습니다. 따라서 생성기 구성 파일에 카탈로그와 스키마를 지정하지 않는 것이 가장 좋습니다. 단지 데이터 테이블의 이름을 지정하고 JDBC URL에 데이터베이스를 지정하면 됩니다. mysql-connector-java 8.x 버전을 사용하는 경우 생성기는 MySql의 정보 데이터베이스(sys, information_schema,performance_schema) 테이블에 대한 코드를 생성합니다. 이 작업을 방지하려면 "nullCatalogMeansCurrent=true" 속성을 추가하세요. JDBC URL로 이동합니다.
generator.xml
2 구성 파일을 수정하세요. 페이지에 500 오류가 나타납니다
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配置文件。要加载所有的静态资源。
src/main/resources **/*.yml **/*.xml src/main/resources **/*.*
위 내용은 SpringBoot가 TypeAliases 구성 실패 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!