java - 我的 batis java 解析 SQL Mapper 配置时出错
问题描述
所以我正在使用 Mybatis 创建 CRUD Spring,当我运行应用程序时,它给了我这样的错误
### Error building SqlSession.
### The error may exist in mybatis/Student.xml
### The error occurred while processing mapper_resultMap[result]
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'java.com.model.Siswa'. Cause: java.lang.ClassNotFoundException: Cannot find class: java.com.model.Siswa
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:54)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:38)
at com.repository.SiswaRepo.saveSiswa(SiswaRepo.java:51)
at com.repository.SiswaRepo$$FastClassBySpringCGLIB$$550dcd02.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
at com.repository.SiswaRepo$$EnhancerBySpringCGLIB$$98743102.saveSiswa(<generated>)
at com.controller.SiswaController.inputSiswa(SiswaController.java:39)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
这是Maven模型
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "Siswa">
<insert id = "insert" parameterType = "java.com.model.Siswa">
INSERT INTO siswas (nama, alamat, status) VALUES (#{fullname}, #{address},
#{status});
INSERT INTO nilai (biologi, physics, calculus) VALUES (#{biologi}, #{fisika},
#{kalkulus});
<selectKey keyProperty = "id" resultType = "int" order = "AFTER">
select last_insert_id() as id
</selectKey>
</insert>
这是控制器类
@RequestMapping(value = "/input", method = RequestMethod.POST)
public ResponseEntity<?> inputSiswa(@RequestBody JSONObject jobj) throws ParseException, IIOException {
Adapter adapter = new Adapter();
ArrayList<Siswa> array = new ArrayList<>();
array = adapter.buatSiswadariJSON(jobj);
for (int i = 0; i <array.size();i++) {
siswaRepository.saveSiswa(array.get(i));
}
return (new ResponseEntity<>("data has been inputed", HttpStatus.CREATED));
}
这是存储库类
@Override
public void saveSiswa(Siswa siswa) throws IIOException {
try {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
//select contact all contacts
String nama = siswa.getFullname();
String address = siswa.getAddress();
String status = siswa.getStatus();
float biologi = siswa.getBiologi();
float fisika = siswa.getFisika();
float kalkulus = siswa.getKalkulus();
Siswa siswa1 = new Siswa(nama,address,status );
session.insert("Student.insert", siswa1);
Siswa siswa2 = new Siswa(biologi,fisika,kalkulus);
session.insert("Student.insert", siswa2);
System.out.println("Records Read Successfully ");
session.commit();
session.close();
}catch (Exception e){
e.printStackTrace();
}
}
有人能告诉我xml哪里出错了吗?最后这里是我在intellij中的项目的详细maven结构......
解决方案
您在 XML 中的 insert 方法的parameterType
属性设置错误,应该com.model.Siswa
是java.com.model.Siswa
.
另外,该parameterType
属性是可选的,MyBatis 可以从调用 insert 方法时传入的对象推断出参数类型。
推荐阅读
- python - 关于 numpy 数组操作的内存错误
- java - Thymeleaf 条件图像插入条件下
- azure - 在 azure 上部署本地 elasticsearch 集群
- java - Hibernate 二级缓存总是在获取所有实体时调用数据库
- firefox - 原生 WebRTC SDK 不接受 Firefox 生成的报价
- javascript - 将导出的方法要求到类中的正确方法(原型?)
- python - 试图找到第四个根并不断出现溢出错误
- python - 编写一个名为 findHypot 的函数
- azure-devops - Azure DevOps 在发布期间获取部署代理状态
- java - 如何从 OptaPlanner 中的先前解决方案中获取 ScoreDirectorFactory