zoukankan      html  css  js  c++  java
  • 【JAVA踩坑若干——BUG异闻录】

    断断续续的记录一些BUG信息

    以前踩坑都是零散的记述,这次打算单独写个博客记述一下,如果能帮到大家我就很开心了,如果我的帮不上什么忙,也祝愿xdm可以早日解决bug,毕竟脑瘫bug有,但想必还没那么多.= 。=

    【bug】.【mybatis】

    今天突然需要手写一遍mybatis基础,那么,配置数据库连接是必要的,我在mybatis-config.xml中配置部分 如下

    <configuration>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8amp;&useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true"/>
                    <property name="username" value="root"/>
                    <property name="password" value="password"/>
                </dataSource>
            </environment>
        </environments>
       
    </configuration>

     此时连接正常, 这个时候我又想试试properties,当我把连接语句写在db.properties内的时候发现连不上了,url的value我是直接复制的,why?后来窝想起来了,

    xml里面的& 都换成了&amp;  所以我的properties文件内容也得换回来,即    &amp;   ->>替换为>>   &    ,注意分号也一起换掉

    db.properties

    driver=com.mysql.jdbc.Driver
    
    url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    
    username=root
    
    password=password

    吐槽一下mysql ,低版本函数有的用不了,高版本 兼容性又不太行...

    【bug】.【mybatis】

    错误:mybatis 根据id查询 结果除了di其他字段均为null

    当我借助动态sql写一个查询语句后,具体是根据id查询 ,list多条输出。 测试执行结果 打印出来是一条条数据,但是所有字段除了id是正确的,其他子段都是null

    猜测1:映射问题,是否是由于类似a_name 和 aName这种驼峰不对应导致,但显然并不是,我已经在配置文件中添加了驼峰命名规范:

    <settings>
    <!--使用驼峰命名转换,可以自动去掉数据库内字段名的下划线并转为java驼峰格式,例如bookName -> book_name -->
    <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>

    而且普通的id查询是没有问题的

    猜测2:那么如果不是驼峰问题,就要思考一下用foreach的list查id和普通id有啥区别,我不是要foreach就可以正常输出,这个暂时先码住,因为新的bug来了

    【bug】.【boot&mybatis】

    先重复一遍MVC执行思路:

    大致上思路就是通过网页请求,控制层接受请求和参数并判断来执行对应方法,方法内会有语句来执行页面跳转或者函数调用(通常可以return直接页面跳转,或者return 对象.调用函数)。

    借助controller层调用service层接口方法, 其接口方法再调用service接口实现类中的方法,在标有注解@Service的类,即业务层,

    其可以通过@Autowired注解mapper或者其他方式来 依赖注入;这样就和mapper层(dao层)产生了联系,dao层再去调用xml内的sql语句来实现功能。

    举例来说就是  前端请求->controller层获取->跳转或者执行方法->调用UserService接口的方法->接口再自动调用其实现类UserServiceImpl的方法->实现类中的方法又会调用UserMapper接口的方法->执行sql语句

    增删改查报错: 

    遇到报错 

    1. ..java.lang.NullPointerException: null,

    实际上这种空指针有很多可能性, 但应该是缺少一些东西,这里我因为没有给UserService接口加注解@Autowired导致空指针

      2.Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template [user/test],

    User/test是我的请求路径,很明显它无法解析,那多半是controller层出了问题,最后我发现我没加@RestController...这个注解加在controller类上,就可以不用在每个函数上加@ResponseBody注解。

      3.写模糊查询的的时候报了个错,说userName未找到,后来我发现我写了resultmap,其中property是userName,jdbcType="VARCHAR"

    正确写法是这样:

    user_name like concat('%',#{userName,jdbcType=VARCHAR},'%')
    or name like concat('%',#{name,jdbcType=VARCHAR},'%')

    其实打user的时候提示里有这个,但是我当时没当回事。。

      4.这个呢应该不算bug,只是 我用lombok依赖时发现函数里没法识别user.getIdlombok是省略getset的,所以报错可能是编译器没反应过来,也可能是没下载lombok插件,在idea里手动搜索并install即可

    【bug】【boot与mybatis】Invalid bound statement (not found): com.wang.c.dao.DeptDao.findAll

      这个错就很[**龙门粗口**] ,看到这个错,根据经验判断是mapper映射问题或者什么和mapper有关的东西:

      我按照网上的帖子找,没有解决。

      解决过程如下:

      接口与mapper的id检查,ok,看了一眼yaml的配置文件,好像也没问题,但是总是报错500,没有映射成功,

      (这个时候就要敢于猜测了,某侦探说过,排除掉其他选项,那么即使再不合理,答案也只能是最后一个选项)

      

     注意了,这句

    mapper-locations: classpath:mapper.popo/*.xml 

      按照经验来说 路径应该把  ' . '  换成  ' / '  ,但这里不行,包名是mapper.xx,那我写mapper位置的时候也必须是mapper.xx/*.xml

    我试了试换成左斜杠,会报错:Invalid bound statement (not found): com.wang.c.dao.DeptDao.findAll

    ps:总感觉怪怪的,可能是我包路径问题,总之遇到这种情况可以试一试,用 '点' 或者 ‘左斜杠’

    【bug】SpringCloud相关

    在写demo的时候发现有个小问题:

    我发现idea工程里java文件为灰色(原本应该是绿色),是相关pom没有加载,原因大多都是由于删过一些项目然后造成的操作遗留吧。。具体可以在settings里设置ignored files,将其取消勾选;

    然后写Eureka服务注册的时候报错

     Connection refused,

    解决过程: 出现这种情况,很多人都是没有禁止eureka注册自己,也有的是yaml文件的格式有问题,还有的是端口占用

     解决过程:

    然后我添加了两句,如图

     

    这次报错为连接被拒.

    Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect(也叫springcloud Eureka中注册服务异常java.net.ConnectException: Connection refused: connect

     

    我看到8888端口了,这个是默认端口,我猜想是否是因为配置文件未加载呢,遂百度,有人建议把application.yml改为bootstrap.yml,因为bootstrap优先级高,我改了,但木有效果;

    然后我尝试在yaml里加这个:

     

    无效,再把application.yml改为bootstrap.yml,运行成功

    总结:需要添加spring cloud 配置,application改为bootstrap,添加

    register-with-eureka: false # 重点
    fetch-registry: false # 重点
    位置如图:

    【非BUG,idea与maven问题】

    当你想偷懒直接复制一个子工程(model)时,发现java什么的都是灰色的,启动类也没有运行绿色小三角,解决办法如下:

    父工程右键:

     然后import对应子工程的pom,点ok即可

    【error】org.springframework.boot.web.server.WebServerException: Unable to start embedded Undertow

     环境交代:运行一个自动生成的demo项目,技术栈为boot+cloud+mysql+maven+redis+docker

       因为是自动生成的项目,所以我没有做什么改动, 百度了一下,也基本不是我这种情况,后来发现是项目的jdk版本设置变成11了,改成本地原本的版本即可,这可太草了(草,一种植物)

     

  • 相关阅读:
    Excel VBA 根据下拉框单元格的值来改变另一个下拉框单元格的值
    HTML Encode 和Decode
    端口号8080和8181被占用的解决方法!
    Eclipse中全局搜索和更替
    HTTP协议详解
    SQL server 常用语句
    50道 Sql语句题
    JAVA过滤器与SpringMVC拦截器之间的区别
    javaWeb中 servlet 、request 、response
    Java 中的 request 和response 区别
  • 原文地址:https://www.cnblogs.com/dabuliu/p/15008931.html
Copyright © 2011-2022 走看看