zoukankan      html  css  js  c++  java
  • 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个小时。基础学完了一切才刚刚开始。重要的是在实践中提高熟练度和学习其中的源码及设计思想。

  • 相关阅读:
    spring框架基本操作
    HTML 小练习(静态网页)
    sqldeveloper 连接oracle失败报12514(日常错误)
    基于docker容器搭建fastdfs分布式文件系统
    centos7 64位系统jdbc连接oracle报错问题
    openstack kolla多节点容器化环境安装
    Android TabHost设置setCurrentTab(index),当index!=0时,默认加载第一个tab问题解决方法。
    maven导入dom4j以及jaxen.jar报java.lang.UnsupportedOperationException:错误
    android自学笔记(1):android简介
    Linux命令(7):rm命令
  • 原文地址:https://www.cnblogs.com/renxuw/p/12965355.html
Copyright © 2011-2022 走看看