近期在上线一个模块,工作量比较大,故晚上经常性加班,工作日生活有点两点一线。
期间遇到了形形色色的一些问题,大致记录下。
工具:IDEA
Q1:修改了一个Entity,准备删掉一个字段。
启动tomcat时候,localhost:8080 无法正常打开网页。
Debugger显示:Connected to the target VM, address: '127.0.0.1:57484', transport: 'socket (刚又尝试了一遍,删除Entity中的变量,正常部署项目.....尴尬了)
原因:由于在项目中的这些字段是直接映射到数据库字段里的,所以当我在Entity里删了该字段之后,导致无法映射成功。
解决方法:
目前对字段对应的变量做什么操作。
原考虑:
1,直接在Entity的变量上增加注解:@Transient,防止映射到数据库里
2,直接删除变量
显然第二种实在点。
Q2:页面跳转问题(Ajax)
类似流程:前端页面输入一个数值,该值传入后台Controller里,进行查询数据库,如果查询到该值,要在原页面上提示 数值已存在,如果没查询到,则执行某insert 操作,跳转到另一个页面。
解决方法:
采用Ajax控制,大致代码逻辑如下:
$.ajax({
url: "check", //进入到Conroller中的@GetMapping(path = "/check", produces = MediaType.APPLICATION_JSON_VALUE)
type: "GET", //GET方式
data: { K: V }, //传入后台的值
dataType: "json",
success: function(data) {
if (data.result== 0) { //根据后台ResponseEntity传回的数据,在后台代码中,
//我这里用ModelMap model,将model.addAttribute("result" ,result); result=0 表示查询不到数据
//return ResponseEntity.ok(model)
location.href = "nextPage"; //跳转到新页面
} else {
$("#errorText").text("数值已存在"); //弹出提示语
return;
}
},
})
具体语法请百度下,我用得相对简单。
Q3:设置查询时间(只是觉得有趣,故记录下)
前端页面有个时间范围的搜索条件,当输入值之后,并没有将endDate设置为选定日期的23:59:59,似乎是因为项目中没有使用插件的原因
为了统一下风格,故在后台进行处理。
这里将时间设置为查询日期的23:59:59
Calendar endCalendar = Calendar.getInstance(); endCalendar.setTime(endDate); //时:分:秒 endCalendar.set(Calendar.HOUR_OF_DAY, 23); endCalendar.set(Calendar.MINUTE, 59); endCalendar.set(Calendar.SECOND, 59); return endCalendar.getTime();
Q4:映射数据库字段问题(比较有趣的点)MySQl
某表新增加一个字段,在Entity里只需增加一个成员变量即可( JPA 规范机制)
但新增字段比较特殊,是一个外键,即用来关联另一张表的 XXid。
实操:成员变量为另一个表对应的Entity类型 XX,映射到数据库之后显示为XX_id。即在Entity中直接创建了一个对象 作为成员变量。