工作记录
(工作记录)
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
1.测试dubbo服务
测试dubbo服务不是测试http请求的时候在dubbo服务的实现类建测试包测试
类上要加上测试注解
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Bootstrap.class)
2.数据库相关
(1). 数据库字段可以为空就不用截取,字段类型是varchar带长度就根据长度截取,因为超长会报错
(2).查询数据库的字段数据类型要跟接收类的属性类型一致,不然会导致没有数据或者接受的数据不正确(比如数据库是Bigdecimal,接收对象用int接受就会损失精度)
(3).模糊查询:
模糊查询首先想到的就是contains,contains用法如下:
select * from students where contains(address, ‘beijing’)
但是,使用contains谓词有个条件,那就是列要建立索引,也就是说如果上面语句中students表的address列没有建立索引,那么就会报错。
模糊查询sql写法(不区分大小写)
<if test="name != null and name!=''">
and upper(CHANNEL_NAME) like '%' || upper(trim(#{name}))|| '%'
</if>
(4).数据库隔离级别:4种隔离级别从高到低依次为:
1.- Serializable:串行化
2.- Repeatable Read: 可重复读
3.- Read Commited:读已提交的数据
4.- Read UnCommited:读未提交的数据
1.Mysql默认隔离级别:可重复读
2.Oracle默认隔离级别:读已提交(只支持读已提交跟串行化[隔离事务的最高级别,事务之间完全隔离])
3.Sql Server默认隔离级别:读已提交
(5).事务传播行为:就写两个
1.PROPAGATION_REQUIRED:操作必须在事务中执行,没有事务就创建
2.PROPAGATION_SUPPORTS:有事务最好,没有也没差
(6).并发事务引起的问题
(1).脏读:一个事务读取到另外一个事务未提交的数据
(2).幻读:同样的条件,第一次跟第二次查询的符合条数不一样(重点在于更新跟删除操作)
(3).不可重复读:同样的条件,第一次跟第二次查询到的数据值发生变化
(7).事务四大属性ACID
1.原子性:事务中的所有操作,要么全部执行,要么全不执行
2.一致性:事务操作前后数据都是一致的
3.持久性:事务一旦提交,对数据库的影响是永久的,不能回滚
4.隔离性:一个事务在提交之前,其他事务不可见
3.Assert(断言)
例子:
Assert.assertNotNull(a,b);
参数b:值
参数a:b值为空时的报错信息
Exception in thread "main" java.lang.AssertionError: 不能为空
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertNotNull(Assert.java:712)
at Test2.main(Test2.java:12)
4.Rop框架一点东西
request.getRopRequestContext()之后可以获得系统级参数跟业务级参数
5.参数检验
(1).接口文档中的属性如果有做长度限制就要加上@CharSize(max=多少,message=什么)
(2).判断是否为空用@NotBlank比@NotNull好
(3).部分检验注解
@JsonProperty(“unbind_id”)
@NotBlank(message = “解绑id不能为空”)
@Size(max = 32, message = “解绑id不能超过32个字符”)
@Pattern(regexp = PRIMARYKEY_PATTERN, message = “解绑id只能包含字母和数字”)
(4).调用方法之前会先检验参数,不符合直接返回错误信息不进入方法
(5).参数是用对象接收的时候,可以在对象前加上@Vaild进行参数校验,然后加上一个BindingResult bindingResult
public ApiResponse payOutList(HttpServletRequest request, HttpServletResponse response, @[email protected] PayOutListVO reqVO,BindingResult bindingResult){
ParamsValidErrorHandler.handleParamsValidateResult(bindingResult);
//参数检验后的方法内容
}
(6).参数用字符串的时候,如果需要进行参数校验,可以先把字符串转对象
public void payoutExport(HttpServletRequest request, HttpServletResponse response, String param){
PayOutListVO reqVO=JSONObject.parseObject(param,PayOutListVO.class);
ParameterValidation.validateRequestDTO(reqVO);
//对象转换成功后的方法内容
}
post请求,表单提交
"param":{"id":"5","orderCode":"5"}
(7).手动检验参数抛出自定义异常
throw new NpayAdminException(NpayAdminErrorEnum.PARAMETERS_ERROR,"参数错误)");
6.比较简便的为对象赋值
赋值新对象
UserInfo userInfo = UserInfo.builder()
.name("zzl")
.email("[email protected]")
.build();
7. 并发控制(数据库方面)
数据库中有版本字段,编辑时传入当前版本,作为判断条件控制并发操作,做编辑修改/审核/新增操作时查询数据库判断版本是否正确,然后将版本加1
sql例子
UPDATE T_CHANNEL c
SET c.STATE = 'ENABLED',
c.VERSION = c.VERSION + 1,
c.LAST_EDITOR_ID = #{lastEditorId},
c.LAST_EDITOR = #{lastEditor},
c.LAST_EDITOR_DT = #{lastEditorDt}
WHERE c.ID = #{id}
AND c.VERSION = #{version}
编辑修改状态时需要先根据传过来的id去查询状态跟版本时候跟前端传过来的状态跟版本一致,不一致抛错,定义变量接收操作结果,变量不等于一说明没有进行任何更新,给出对应提示(可能进行同时操作,刷新重新试试)
涉及到版本号的新增/编辑/审核操作要判断成功行数,根据不同的返回结果返回数据
8.excel导出
根据实体类导出对应表,没什么注意的,应该就(数据库数据集合)List中实体类E的属性要跟导出实体类B的属性一致,常用注解@Excel,参考地址 http://opensource.afterturn.cn/doc/easypoi.html
根据模板导出excel,主要代码:
TemplateExportParams params = new TemplateExportParams("templet.xls");
Map<String,Object>map=new HashMap<>();
//map里面存放模板数据
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
Excel模板要放在resource目录下
如果发现workbook为空的情况可以试试添加pom插件
<!-- 让maven不编译xls文件,但仍将其打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
9.BigDecimal常用方法
10.后台管理权限相关
开发完成后在类上加上@SessionCheck注解,在各个方法上加上
@PermissionCheck(code = "PAY_OUT_LIST", name = "支出报表列表", desc = "支出报表列表", customvalue = "ZCBB")
然后需要在对应数据库表插入数据
INSERT INTO WEBGEAR_PERMISSION (
POINT_TO,
CODE,
PCODE,
TREE_PATH,
NAME,
"DESC",
IS_CREATELOG,
MD_CODE
)
VALUES
(
'com.fzs.pay.controller.v2.IncomeCostManagerController/payOutList',
'PAY_OUT_LIST',
'',
'/ZCBB/PAY_OUT_LIST',
'支出报表列表',
'支出报表列表',
'0',
'ZCBB'
);
数据库配置:10.20.100.63:1521 fzsdb 账号/密码:samp/lxkj_info
11.远程debug
配置Edit Configurations->Remote新增
一般只需要修改这个地方的相关参数
端口从配置文件中找,ip找服务器
12.查看日志
开发环境
打开SecureCrt
(SecureCrt安装步骤:https://blog.****.net/yanjiangdi/article/details/78343452)
账号:samp
密码:[email protected]
生产环境
1.打开Check Point SecuRemote拨v*n
账号:
密码:
2.登陆堡垒机
堡垒机链接地址:https://10.20.160.100
账号:linxin
密码:lx123456
登录完成后直接点击就好