断断续续的记录一些BUG信息,我尽量给出解决办法
以前踩坑都是零散的记述,这次打算单独写个博客记述一下,如果能帮到大家我就很开心了,如果我的帮不上什么忙,也祝愿xdm可以早日解决bug,毕竟脑瘫bug有,但想必还没那么多.= 。=
bug1.【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 ,低版本函数有的用不了,高版本 兼容性又不太行...
bug2.【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有啥区别,这个暂时先码住,因为新的bug来了
bug3.【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即可