Mybatis问题记录-狂神版
前言
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&useUnicode=true&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+/的时候发现注释老是从第一列开始生成,很难受
就问你难不难受?????每次手动调整属实憨憨,然后百度一下
File
> Settings
> Editor
> Code Style
> XML
>Code Generation
其他语言同理
舒服了~~~~
使用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个小时。基础学完了一切才刚刚开始。重要的是在实践中提高熟练度和学习其中的源码及设计思想。