Mybatis碰到的问题

找不到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&amp;useUnicode=true&amp;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&amp;useUnicode=true&amp;characterEncoding=UTF8&amp;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了。。。

这个缓存太坑了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值