Mybatis问题记录-狂神版

ε祈祈猫儿з 提交于 2020-07-28 12:06:54

前言

B站Up狂神说的教程,写的挺好的,东西也新。强烈推荐
https://www.bilibili.com/read/cv5702420

微信文档

狂神说MyBatis01:第一个程序:https://mp.weixin.qq.com/s/vy-TUFa1Rb69ekxiEYGRqw

狂神说MyBatis02:CRUD操作及配置解析:https://mp.weixin.qq.com/s/efqEupNSPZUKqrRoGAnxzQ

狂神说MyBatis03:ResultMap及分页:https://mp.weixin.qq.com/s/LXXIR7W_kZBHPIDqkNwrLg

狂神说MyBatis04:使用注解开发:https://mp.weixin.qq.com/s/3x3ynp5qhGNP-leeOxBU6g

狂神说MyBatis05:一对多和多对一处理:https://mp.weixin.qq.com/s/Dpt0LHTgx0kL7RCk8PZ2aw

狂神说MyBatis06:动态SQL:https://mp.weixin.qq.com/s/gtXsTG2naMTDnC6aqQICMg

狂神说MyBatis07:缓存:https://mp.weixin.qq.com/s/MwkfQNMXD6oO3dOaQYDdGA

配置文件包含中文注释导致出错

The error may exist in com/xuw/dao/UserMapper.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效。

UserMapper.xml

<?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">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.xuw.dao.UserDao">
    <!--select查询语句-->
    <select id="getUserList" resultType="com.xuw.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/xuw/dao/UserMapper.xml"/>
    </mappers>
</configuration>

解决办法1

删除所有中文注释

解决办法2

解决:解析xml时,有中文,此时把xml文件的头

<?xml version="1.0" encoding="UTF-8"?>

改成:

<?xml version="1.0" encoding="GBK"?>

即可!

解决办法3

在Maven配置文件pom.xml中插入

<project>
	<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
</project>

让整个项目统一字符集编码,就需要设定UTF-8

IDEA注释如何在光标位置生成

在注释的Ctrl+/的时候发现注释老是从第一列开始生成,很难受

image-20200527184855894

就问你难不难受?????每次手动调整属实憨憨,然后百度一下

File > Settings > Editor > Code Style > XML >Code Generation

image-20200527185350113

其他语言同理

image-20200527185539563

舒服了~~~~

使用association时映射出错

报错

Cause: java.lang.IllegalStateException: No typehandler found for property name

遇到这个错误试了很多网上的方法,都不能解决,最后找到解决方案,顺便把出现错误的几种原因总结了一下
1、mapper文件中的所写的对象属性名和数据库字段名不能对应
2、mapper文件中的所写的对象属性类型和数据库字段类型不对应(我的错误)
3、对象属性的set方法中类型和数据库字段类型不对应


排错过程

出现了错误就一一排查

排查问题1

### The error may exist in com/xuw/dao/StudentMapper.xml

系统提示可能出错的位置

<select id="getStudents2" resultMap="studentTeacher2">
        select s.id sid,s.name sname,t.name tname
        from student s,teacher t
        where s.tid=t.id
</select>

    <resultMap id="studentTeacher2" type="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <association property="teacher" javaType="Teacher">
            <result property="name" column="tname"/>
        </association>
    </resultMap>

与老师写的多次对比后没发现问题(不存在对象属性名和数据库字段名不能对应的问题)

排查问题2

实体类的代码

package com.xuw.pojo;

import lombok.Data;

import javax.swing.*;//当时打完看到引入了这个包,都没有说排查一下(因为实体类中一般没有这个包),还是不够小心啊

@Data
public class Student {
    private int id;
    private Spring name;//这里打快了写成可Spring,属实憨皮
    private Teacher teacher;
}

从XML文件到接口文件再到实体类文件,终于发现了错误。把String打成了Spring编程确实是一项对细心程度要求极高的事,以后一定要注意

改成String就成功执行了

问题3

至于问题3,set方法的问题,我用的Lombok插件,改了属性类型就自动注解成String类型了。

挖坑

面试高频

  • Mysql引擎
  • InnoDB底层原理
  • 索引
  • 索引优化!

后记

边看视频边敲代码,用了3天左右吧,大概16.5个小时。基础学完了一切才刚刚开始。重要的是在实践中提高熟练度和学习其中的源码及设计思想。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!