此贴收集 - 程序员的科技与狠活

此贴一直收集,欢迎广大程序员们分享

一、代码书写上

1、表字段查询

1、where 1<>1

可以直接用 select * from 表名 where 1<>1查出字段。不用再拼接limit 1; top 1

2、表结构查询

不同的数据库查询表结构有不同的sql语句;但我们可以直接用:

scss 复制代码
Connection connection = DriverManager.getConnection(url, username, password);
DatabaseMetaData metaData = connection.getMetaData();
metaData.getColumns(...) // 获取字段
metaData.getIndexInfo(...) // 获取索引
metaData.getPrimaryKeys(...) // 获取主键

3、代码区块 region

通过在代码中加入region可以收缩代码块

arduino 复制代码
// region
xxx代码
// endregion

4、查询数据库OOM

将一1000万条数据库记录(10GB)加载到内存中,加载到500多万条记录的时候,就报了OOM(内存不足)

在创建PreparedStatement时,resultSetType参数设置的是TYPE_SCROLL_INSENSITIVE或TYPE_SCROLL_SENSTIVE,这两个参数的共同特点是允许结果集(ResultSet)的游标可以上下移动。而默认的TYPE_FORWARD_ONLY参数只允许结果集的游标向下移动。

加载这么大量的数据到内存过程中,只是顺序读取每一条记录,TYPE_FORWARD_ONLY就够了,游标用不着前后移动,于是改为TYPE_FORWARD_ONLY就没报OOM了。

ini 复制代码
connection.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);

参数 int type

  • ResultSet.TYPE_FORWORD_ONLY结果集的游标只能向下滚动。
  • ResultSet.TYPE_SCROLL_INSENSITIVE结果集的游标可以上下移动,当数据库变化时,当前结果集不变。
  • Result.TYPE_SCROLL_SENSITIVE返回可滚动的结果集,当数据库变化时,当前结果集同步改变。

参数 int concurrency

  • ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库中的表。
  • ResultSet.CONCUR_UPDATETABLE能用结果集更新数据库中的表。

查询语句

  • ResultSet re = stmt.executeUpdate(sql);用来更新数据库信息或插入数据
  • ResultSet re = stmt.executeQuery(sql);用来查询数据库信息

当我们使用ResultSet re = stmt.executeQuery(sql)查询后,我们可以使用下列方法获取信息:

public 复制代码
public void beforeFirst 将游标移动到结果集的初始位置,即在第一行之前。

public void afterLast() 将游标移到结果集最后一行之后。

public void first() 将游标移到结果集的第一行。

public void last() 将游标移到结果集的最后一行。

public boolean isAfterLast() 判断游标是否在最后一行之后。

public boolean isBeforeFirst() 判断游标是否在第一行之前。

public boolean ifFirst() 判断游标是否指向结果集的第一行。

public boolean isLast() 判断游标是否指向结果集的最后一行。

public int getRow() 得到当前游标所指向行的行号,行号从1开始,如果结果集没有行,返回0

public boolean absolute(int row) 将游标移到参数row指定的行号。如果row取负值,就是倒数的行数,absolute(-1)表示移到最后一行,absolute(-2)表示移到倒数第2行。当移动到第一行前面或最后一行的后面时,该方法返回false

不带参数使用的是默认值。你可以在建立Statement时指定resultSetType,可指定的参数有:ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE、ResultSet.TYPE_SCROLL_SENSITIVE、在不指定情况下,预设是第一个也就是只能使用next()来逐条获取行,指定第二个或第三个则可以使用ResultSet的afterLast()、previous()、absolute()、relative()等方法。

原文:blog.csdn.net/10km/articl...

5 一对多连表查询,根据不同类别对字段行转列

有这样的场景:一对多连表查询,根据group by进行分组;其中某个字段需要将多个值拼接成json或者数组。

vbnet 复制代码
select xxx, group_concat(
        CASE role
        WHEN "ADMIN" THEN
                user_id
        END
) AS user_id1,
group_concat(
        CASE role
        WHEN "MEMBER" THEN
                user_id
        END
) AS user_id2

6、表字段存在关键字

表字段存在关键字时,一般mybatis mapper直接查询会报错;只需要在@TableField中给字段加上`` 就可以

kotlin 复制代码
@TableField("`range`")

二、IDEA

1、快捷方式

1、sout、soutm, soutp, soutv直接出System.out.println

2、new 类().var 直接生成 : 类 instance = new new 类();

3、 使用 Shift+Enter 在当前行之后开始一个新行,使用 Ctrl+Alt+Enter 在当前行上方开始一个新行;

2、插件

mybatisX插件:

  • mapper and xml can jump back and forth
  • mybatis.xml,mapper.xml prompt
  • mapper and xml support auto prompt like jpa (reference MybatisCodeHelperPro)
  • integrate mybatis generator Gui (copy from free mybatis plugin)

Maven Helper插件:

  • easy way for analyzing and excluding conflicting dependencies
  • actions to run/debug maven goals for a module that contains the current file or on the root module
  • action to open terminal at the current maven module path
  • actions to run/debug the current test file.

3、打印调试

有没有习惯用System.out.println打印查看变量内容的,有IDEA有更方便的调试方式,并且不会入侵代码 官方内容如下:

4、条件断点

5、删帧

功能:当我们 Debug 从 A 方法进入 B 方法时,通过降帧(退帧)可以返回到调用 B 方法前,这样我们就可以再一次调用 B 方法。

通常用于当我们快执行完 B 方法后,发现某个重要流程被我们跳过了,想再看一下,则此时可以先回退到 A 方法,然后再次进入 B 方法。

我们知道方法的执行和结束在 JVM 中对应的是栈帧的入栈和出栈,因此栈帧描述的就是方法对应的模型,而降帧(退帧)则对应的就是回退到上一个方法。

6、多线程调试

7、方法断点

8、字段断点

9、异常断点

可以在抛出异常的地方进行暂停,而无需在具体的代码中打断点。

10、主动抛异常

在项目运行过程中,特别是想在远程环境抛出异常,需要修改代码重新部署,测试完后还要修改回来再次部署,很不方便。而 Throw Exception 则可以直接抛出一个异常,避免了这些繁琐的流程。

11、强制返回

强制结束当前流程,直接返回

场景:当我们继续往下执行时就要将错误数据插入数据库时,就可以用强制返回结束当前流程

12、Stream 调试(Trace Current Stream Chain)

功能:当我们暂停在 Stream 的处理代码行时,可以将 Stream 的整个处理流程以图形化界面的形式展示。

当我们发现问题出在 Stream 的处理流程中时,我们可以通过该功能来看到每个步骤处理前和处理后的数据,方便我们定位排查是哪一步出了问题。

13、执行表达式(Evaluate Expression)

功能:执行一段代码而无需重启项目

当我们在测试时,发现某段代码逻辑很难有符合条件的数据时,可以通过该功能直接修改数据,来加快我们的测试。

该功能非常强大,我们可以在这边执行任何逻辑,举个例子:可以将数据保存到数据库、可以发送一个RPC请求等等。

14、远程调试(Remote JVM Debug)

功能:调试部署在远程服务器上的代码。

远程调试最常见的使用场景是排查线上问题。

远程调试使用教程:

不同版本的远程debug所需参数不同,通过IDEA可以看到不同版本对应参数

配置方式:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8081 -jar jdk17demo-0.0.1-SNAPSHOT.jar

下面在本地演示一下:

本地启动一个简单的项目:

remote JVM debug 监听8081端口

发送Get请求

请求会进入IDEA,然后我们就可以去debug了

三、前端

1、调试

前端调试代码可以直接在代码中加入debugger

2、清除浏览器缓存

F12将控制台打开,然后鼠标右键点击页面刷新按钮,会出现清除缓存功能

相关推荐
攸攸太上12 分钟前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
罗曼蒂克在消亡28 分钟前
graphql--快速了解graphql特点
后端·graphql
潘多编程30 分钟前
Spring Boot与GraphQL:现代化API设计
spring boot·后端·graphql
大神薯条老师1 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
前端李易安2 小时前
Web常见的攻击方式及防御方法
前端
2401_857622662 小时前
Spring Boot新闻推荐系统:性能优化策略
java·spring boot·后端
PythonFun2 小时前
Python技巧:如何避免数据输入类型错误
前端·python
hakesashou2 小时前
python交互式命令时如何清除
java·前端·python
天涯学馆2 小时前
Next.js与NextAuth:身份验证实践
前端·javascript·next.js
AskHarries2 小时前
如何优雅的处理NPE问题?
java·spring boot·后端