【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了,改成本地原本的版本即可,这可太草了(草,一种植物)

 

原文地址:https://www.cnblogs.com/dabuliu/p/15008931.html