首页 > 解决方案 > 我的 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结构......

在此处输入图像描述

标签: javamybatis

解决方案


您在 XML 中的 insert 方法的parameterType属性设置错误,应该com.model.Siswajava.com.model.Siswa.

另外,该parameterType属性是可选的,MyBatis 可以从调用 insert 方法时传入的对象推断出参数类型。


推荐阅读