SSM项目问题
- pl/sql直接在客户端增删改数据后,需要再运行commit,否则数据不会提交到数据库进行存储
- Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 文件提前结束。,最终多出来.out.xml文件,删掉重启还是会有。 出现这种错误的原因:我直接点的绿色按钮重启,但是因为我刚改了xml文件,可能还没有加载进去,我右击项目名run as就没问题,所以说重启按钮和右击还是不一样的
- 忘记写Autowired会报NullPoint异常
- 后端逻辑都通的,但是修改和删除没效果,添加和显示正常,一直在改后端,因为eclipse有时候反应迟钝,最后发现问题出在了页面上,有两个name为id的文本框!
- pl/sql在插入数据时乱码,增加了环境变量后好了
NLS_LANG:AMERICAN_AMERICA.AL32UTF8 - 前端样式是我最头疼的地方,表格里面嵌套着四个表格,要让每个表格对齐,各种改tr th td的width align都不行,最后借助bootstrap的样式,哎。。。。
text-nowrap控制内容不换行,我只加了class="table text-nowrap"就好了
<div class=table-responsive">
<table class="table text-nowrap">
<thead>
</thead>
<tbody>
</tbody>
</table>
</div>
- 用SVN同步Excel文件时,直接在源文件添加内容后,直接提交,SVN显示没有修改,并且关掉重开,添加的内容没了!!!解决方法:将文件复制一份在本地打开,添加内容后复制回项目中,此时可以提交
- 获取已选择的option值
$("#select option:selected").val();
$("#select option:selected").text(); - 根据value选中下拉列框
//选中下拉列表
function setCheck(selectId, value){
var select = document.getElementById(selectId);
for (var i = 0; i < select.options.length; i++){
if (select.options[i].value == value){
select.options[i].selected = true;
break;
}
}
}
- js中可以通过将变量的值设置为 null 来清空变量。
- struts1标签 logic:empty logic:notEmpty logic:present logic:notPresent
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<logic:empty name="ll">
ll为空
</logic:empty>
<logic:notEmpty name="ll">
ll不为空
</logic:notEmpty>
<logic:present name="ll">
ll存在
</logic:present>
<logic:notPresent name="ll">
ll不存在
</logic:notPresent>
SpringCloud项目遇到的问题
- 前后端逻辑都通的,报404错,解决:忘记写@ResonseBody
- 启动项目报找不到某包下的某类,解决:依赖的包有问题,版本问题
- IDEA启动项目一直卡在build,
解决:法一:删除对应路径下的target文件夹
法二:法一不行的话,打开任务管理器,把java相关的进程干掉,原因可能是突然停掉项目后相关进程没结束,所以卡在build - list判空:
list!=null&&list.size()!=0
- spring中#{}取得是表达式的值,${}取得是配置文件的值
- 事务是通过异常触发,通过切面处理
- cloud项目之间的调用是通过微服务,而不是依赖
- 常用工具:
UltraEdit 文本编辑器,可以比对文件
Visual studio code 写前端,比如node.js,每次都需要在当前目录下设置Path[set PATH=XXXnode地址]
mRemoteNg 连接linux,类似xShell
clearcase 版本管理工具
iNode 连接内网
fileZilla 上传文件的,类似ftp - 前端开发使用的随机数生成方法Math.random()是不安全的,可用window.crypto.getRandomValues()
- 在IDEA中,只更改类中方法,不需要重新启动项目,ctrl+shift+f9重新加载即可,如果是更改配置文件或新增方法或新增全局变量就需要重新启动项目;ctrl+alt+m封装方法;ctrl+空格 自动补全
- 遍历list数据多时,可以通过编写算法控制访问数据库的次数来缓解压力,比如每50笔操作一次
- 遍历两个列表更新数据时,通过主键或唯一键判断相等的再修改
- 数据库操作,要习惯性加别名,防止表名冲突且会有提示
- js中字符串的数据比较大小,不能直接比,要用减,因为js是弱类型
- 连上内网但访问不了页面、数据库,报DNS配置错误;解决:将另一个本地连接(TAP Windows Adapter…)开启(貌似是IPV6)
- 上传路径中:windows是\,linux是/
- git的简单使用:
git clone:拉代码
git checkout dev:切到开发分支
git add:交给git管理
git commit -m ‘xxx’:提交到本地仓库
git pull:将最新代码更下来
git push:提交到远程仓库
git config - global user.name 'xxx’修改提交人姓名
一般提交代码:①先git pull再git cmmit+push
解决冲突:通过右键revert回退到上一版本,即可取消commit - 习惯性加备用字段,防止字段更改加大开发负担
- Method breakpoints may dramatically slow down debugging;解决:去掉java.exception breakpoint里的断点
- postgresql,当我把表中字段改成大写,修改字段类型的语句里的字段是小写(字段有引号),会报字段不存在的问题,但是select时用小写或大写都查不出来(字段加或不加引号都查不出来),说明pgsql不处理双引号里的字符,区分大小写并且会将不在引号里的字段转换成小写。
- 记一次排错:两次查询之间有一个判断对象是否存在,抛出的异常日志不明确(代码问题),但是第二个查询sql没有打印出日志,说明问题出在了判断上,最后才发现是对象在判空之前调的service里是new出来的,始终不为空,所以报错。总结:敲代码的时候要严谨,前后联系,尤其是处理祖传代码的时候
- 工作总结:任何从自己手里发出的工作都要让对方确认,防止扯皮;任何自己需要完成的任务,结果一定要再三确认,避免犯常规问题
- 常用注解:
@Controller(配合视图解析器InternalResourceViewResolver返回页面)
@RequestMapping
@Autowired
@Resource
@ResponseBody
@PostMapping
@RequestParam
@CurrentUser
@RequestBody
@RestController(ResponseBody +Controller,视图解析器不起作用,返回return后的内容)
@Service
@EnableEurekaClient
@FeignClient
@Api - idea中读取properties文件,控制台输出乱码,改编码后还是乱码,删掉重新生成就好了
- 导入项目运行时报java:非法字符,原因是编码不一致,将该文件先改为gbk再改回utf-8就好了
- 运行测试方法,报command line is too long,命令行超长,可以修改配置,shorten command line换一个就可以了,起到缩短命令行的效果
- @FeignClient的name指的是调用微服务的名字,bootstrap.yml中spring.application.name是服务名
- 使用log4j2.xml配置日志,运行时报找不到log4j的配置文件,解决:导入spring-boot-starter-log4j2的依赖,现常用slf4j,可导入log4j-over-slf4j,代码调用log4j会被桥接到slf4j
- Usage of API documented as @since 1.6+,在使用Arrays.copeOfRange时报这个错,project structrue―modules―language level为5,原因是maven默认jdk为1.5,需要在pom文件引入的maven-compiler-plugin的build
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
- 调用外部接口修改金额成功后,更新本表金额时失败,处理方式:所有用到该金额的地方都应该实时查。注意:在开发时就应该考虑到内部和外部要保证数据一致性,尤其是内外部数据需要同时更新时可能会出现sql执行失败的情况
- hibernate从数据库返回的list不会为null,即使是没有数据,值为空,只需判size为0,
所有数据都应该先判null,再用或或者与判其他条件 - 记一次排查sql问题:列表没查出来,先把sql放在navicat里查,减少条件后查出数据,开始排查逻辑;先是发现中文逗号问题,调的是六张表联查的sql,先想他当时为什么这么做,这么做逻辑对不对,然后发现逻辑有问题,再想应该怎么做变动最小,是否考虑到了所有情况,最后修改成功。复盘:排查的过程中当不知道它的原理时,根本不知道排查的方向对不对,所以基础要扎实;也体会到联表查询的sql维护起来比较费劲,越是考虑复杂的场景越要写清注释,尤其是各种码值要描述清楚,也尽量不用联表查询,不清晰。
- 数据库设计,每个字段都要斟酌,尽量不要有冗余字段,可以减少变更时带来的影响;根据之后该表是否会复用,需要考虑字段是否必输(如果会用到多个地方,就不能设为必输,防止别的地方该字段非必输);还需要考虑字段类型,比如varchar,char的选择;索引?
- 详细设计,要站在开发的角度考虑,把每一步都考虑到,所有可能遇到的问题,但不要细节到表,范围定好就行;先建表,建好表逻辑就清晰了
- 开发,要越简单越好(一行就解决的问题不要写多行),还要考虑性能