找不到xml文件
Cause: org.apache.ibatis.builder.BuilderException:
Error parsing SQL Mapper Configuration.
Cause: java.io.IOException:
Could not find resource com/learn/dao/UserMapper.xml
Maven的资源过滤问题
target运行目录并没有加载xml文件
需要在pom.xml中加上:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
再运行,就可以了
编码问题
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效
因为我们连接数据库时url是这么写的:加上了编码格式UTF8
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF8"/>
需要在pom.xml中加上
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
其实,在连接数据库时,还可能会发生时区问题
有时候存在,有时候又不存在。。。
Cause By:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
解决方案就是在前面的url后再加上:
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai"/>
在Select标签中insert语句返回值为null
注意:MyBatis提供了增删改查标签
但是用select标签确实是可以做到增删改查的
比如:在select里的insert语句
但是返回值是Integer类型,而且是null
如果设置insert语句返回值为int
int insert(User user);
会报错
org.apache.ibatis.binding.BindingException: Mapper method 'com.learn.dao.UserDao.insert attempted to return null from a method with a primitive return type (int).
可以把int型改为Integer
UserDao:
Integer insert(User user);
UserMapper:
<select id="insert" parameterType="com.learn.pojo.User" resultType="Integer">
insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
</select>
而我的Test类中:
Integer insert = mapper.insert(new User(4, "zhaoliu", "123456"));
System.out.println(insert);
返回值为null,但是确实是插入了数据
如果使用专属标签Insert
不管返回值是int型还是Integer型,都会有返回值
但是,需要注意这里的inset需要提交事务
不然,虽然有返回值,但是并没有保存进数据库
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSeqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
int insert = mapper.insert(new User(4, "zhaoliu", "123456"));
sqlSession.commit();//提交事务
System.out.println(insert);
sqlSession.close();
}
就ok了
UTF-8的持续错误
就按照上面的pom里加上的
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
还是没用,可能是maven缓存的问题
因为我写了一个项目
立刻就想到了这个UTF-8的问题,在pom.xml里加上后
但是依然继续报错。。。
查了各各方面,突然想起Maven是不是有缓存啊。。。
一看,果然有clean方法
点击clean清楚缓存,再重新部署deploy
然后运行,就ok了。。。
这个缓存太坑了