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&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個小時。基礎學完了一切才剛剛開始。重要的是在實踐中提高熟練度和學習其中的源碼及設計思想。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM