今天在学习mybatis的时候,遇到了这样的错误:
1.Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: com.sun.org.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语句肯定也是错误的