今天在学习mybatis的时候,遇到了这样的错误:
1.Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效。

解决方法:file-settings-file encodings
把project encodings改成utf-8

注意:我们修改完以后,要clean一下,再编译,否则还会报错

然后在mybatis构建中,我还遇到下面的错误

2.java.lang.NullPointerException
at com.kuang.utils.MybatisUtils.getSqlSession

报的是空指针异常,后面我查看的时候

下面这个是我出错的代码,我发现,本来已经定义好了一个静态变量sqlSessionFactory,结果我却又新建了一个,静态变量随着类加载而加载,所以报空指针异常

 private static SqlSessionFactory sqlSessionFactory;

    static {

        try {
            //读取配置文件
            //下面三句话是固定的
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
             SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
             
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

解决方法,不要创建两个对象

 private static SqlSessionFactory sqlSessionFactory;

    static {

        try {
            //读取配置文件
            //下面三句话是固定的
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3.使用mybatis连接数据库时报错:Error querying database. Cause: java.sql.SQLException: The server time zone value
方案:使用mysql 8.0以上的驱动需要配置时区才能正常使用
在url中添加:serverTimezone=Asia/Shanghai

jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai&useSSL=true&useUnicode=true&characterEncoding=UTF-8

4.Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table ‘mybatis.user’ doesn’t exist
这个错误是由于我的粗心导致的,我在学习mybatis的时候,创建一个用来测试的数据库mybatis,里面创建的表是t_user,但是我忘记了,以为表是user,所以写的sql语句肯定也是错误的

更多推荐

mybatis常见错误