断断续续的记录一些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&characterEncoding=utf8&useSSL=true"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> </configuration>
此时连接正常, 这个时候我又想试试properties,当我把连接语句写在db.properties内的时候发现连不上了,url的value我是直接复制的,why?后来窝想起来了,
xml里面的& 都换成了& 所以我的properties文件内容也得换回来,即 & ->>替换为>> & ,注意分号也一起换掉
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语句
增删改查报错:
遇到报错
- ..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.getId, lombok是省略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了,改成本地原本的版本即可,这可太草了(草,一种植物)