简介
经验都是我们日积月累的积累起来的,并不是一开始就有经验的,所以希望该文章能帮助初次开发项目的朋友在项目中少走踩点坑。
小细节
开发阶段需要注意:
1.在查询数据时,如果能一次性查询出做自己想要的数据就一次性查询完,不要调用好几个接口对数据库进行交互,如果数据量小,那可能差距在于多少毫秒,如果数据量大的话,那差距就不止是毫秒了,这样是非常浪费时间的。
//举例说明:
// 获取环比 与数据库打了两次交到
public Integer getDate() {
// 代码简洁,其表达意识明白即可
String userid="1";
// mapper.getDateMap()方法是dao接口中的负责与数据库交互获取数据
Integer i1 = mapper.getDateMap(userid); // 本周期
userid="2";
Integer i2 = mapper.getDateMap(userid); // 上周期
// 环比计算方式(本周期-上周期)/上周期*100%
return (i1 - i2) / i2 * 100;
}
// 获取环比 与数据库打一次交到
public Integer getDate1() {
// 代码简洁,其表达意识明白即可
String userid[]=new String[]{"1","2"};
// mapper.getDateMap()方法是dao接口中的负责与数据库交互获取数据
List<Integer> listii = mapper.getDateMap(userid); // 本周期和上周期数据一同返回
// 环比计算方式(本周期-上周期)/上周期*100%
return (listii.get(0) - listii.get(1)) / listii.get(1) * 100;
}
2.在进行equals相比较的时候,如果要比较的是固定值的话,就通过固定值来比较对象值。
// equals
public static void main(String[] args) {
try {
String name = null;
//正确写法
if ("1234".equals(name)) {
System.out.println("123");
}
//错误写法
if (name.equals("1234")) {
System.out.println("123");
}
} catch (Exception e) {
e.printStackTrace();
}
}
3.当接口中只有一个方法的时候可以建议使用Lambda表达式。注:当接口中只有一个方法的时候,可以称为函数式接口,而Lambda只能用于函数式接口。
public class Demo {
public static void main(String[] args) {
// 优化前
LombdaDemo1 demo = new LombdaDemo1() {
@Override
public void show(int i) {
System.out.println("123");
}
};
demo.show(1);
// 优化后---lomdba表达式1.8新特性
LombdaDemo1 demo1 = (int i) -> {
System.out.println("1");
};
demo1.show(1);
}
}
interface LombdaDemo1 {
public void show(int i);
}
4.将方法中通用的核心语句提取到公共方法或公共类中。注:示例很简单,重在思想。
//未优化前
public class Demo {
public static void main(String[] args) {
demo1();
demo2();
}
public static void demo1() {
// 代替核心代码
System.out.println(111);
System.out.println(222);
System.out.println(333);
}
public static void demo2() {
// 代替核心代码
System.out.println(111);
System.out.println(222);
System.out.println(333);
}
}
//优化后
public class Demo {
public static void main(String[] args) {
demo1();
demo2();
}
public static void demo1() {
show3();
}
public static void demo2() {
show3();
}
public static void show3() {
// 代替核心代码
System.out.println(111);
System.out.println(222);
System.out.println(333);
}
}
5.针对数据查询时减少对like关键字的使用,因为like关键字是扫描全表,当面临数据多的时,很容易导致程序长时间等待查询结果的返回,所以可以考虑使用搜索引擎来优化此问题,具体搜索引擎主件,可以根据实际情况选择。
6.rest风格的url要统一小写,并且封装到URL常量类中。
@GetMapping(value = BaseConstant.INDEX)
public String index() {
return BaseConstant.INDEX_HTML;
}
7.像这种分页、上传下载代码以及httpclient等一些通用代码,可以进行一个通用维护,避免每次使用的时候都需要进行开发。
优化
oracle系列优化
表名称:USER
表结构:ID,NAME,PWD,CREATEDATA
1.SQL语句优化1:当以日期为条件时候,如果日期字段与参数日期值格式不一致的话,那么应该对参数日期进行处理而不是对日期字段进行处理。
优化说明:如果我们格式化数据库字段值的话,那么在查询的时候,系统会先将日期字段的所有值都进行格式化(“所有值”数据量大的话,自己细品),然后在去匹配指定的条件参数。而如果我们的参数是后端已经格式化好之后的值,那么就不需要系统在去进行格式化,而是直接匹配与该参数值相同的内容。
===优化前===
SELECT ID,NAME
FROM USER
WHERE TO_CHAR(TO_DATE(CREATEDATA,'YYYY-MM-DD'),'yyyy')='2021'
===优化后===
SELECT ID,NAME
FROM USER
WHERE CREATEDATA=后端处理过参数格式后的值
2.SQL语句优化2:oracle查询数据的时候条件是从后往前执行的,而不是从前往后执行的,所以在进行条件筛选的时候优先将权重大的条件设置到后面。
优化说明:ID值是唯一的,所以放到条件的最前面(代表最后执行该)。
===优化前===
SELECT ID,NAME
FROM USER
WHERE NAME=XXX AND ID=XX
===优化后===
SELECT ID,NAME
FROM USER
WHERE ID=XX AND NAME=XXX
3.SQL语句优化3:oracle数据库中的表或函数都是大写的,当我们sql语句为小写的时候,系统还要将它进行转换大写,所以我们在写sql语句的时候直接将sql语句写成大写。
优化说明:该优化效果不明显,所以是否优化取决于自己吧~
===优化前===
select id, name from user
===优化后===
SELECT ID,NAME FROM USER
4.还有好多优化例如索引啊,表空间等等就不举例了,根据实际业务场景来进行配置吧