TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
废话少说先上代码:
' j; O3 U0 B h+ V% M复制内容到剪贴板8 J+ I# T/ P! I6 z( j
代码:, L% _/ F4 J% w- N( q+ c2 f
int iPage = 0;
& e0 V3 Y6 K X& ~- \5 i9 v: P int iPerPage = 20;
2 W1 R% Z, ?2 A) @ v; K String sName = "admin";
" c$ O! x* a, r1 d String sSql = "select user.c_name name, (select dept.c_name from db_aty_t_aty_dept dept where dept.c_id=user.c_dept) dept, user.c_gzdh gzdh from dt_aty.t_aty_user user where user.c_dept like "
/ V7 V- f A1 Z4 S# h' J + sName + " and n_valid = 1 and user.c_dept != -1 limit " + iPage + "," + iPerPage;
3 R _2 T* ^+ e大家写的代码是不是这个样子的呢?
; W8 @* n% n" e4 J7 W+ W我相信很多人会说,我的代码比这个写的好多了。% V! h% X4 H% j
好的看下面的代码:
% C$ E6 Q9 E% n+ x v1 X' a; U6 U复制内容到剪贴板$ h$ t! X! C, T
代码:& ]2 d: g% W+ ?5 ^
int iPage = 0;2 ]& ^0 z7 `- W4 U8 g5 r) T0 @
int iPerPage = 20;8 i, J! ]$ c( S+ J9 [ N
String sName = "admin";$ I6 ^6 Q7 j* S: S. A1 a* a2 ?
String sSql = "select " $ }, }6 n2 L- @* c2 Q, ?" X7 I
+ " user.c_name name, "
: A7 N, {. e3 ?3 m3 K4 B1 | + " (select dept.c_name "& y2 w/ H7 v, E( T$ `$ o
+ " from db_aty_t_aty_dept dept "
$ D2 h4 J2 B- V0 w, c + " where "
, W& V0 k1 E/ x + " dept.c_id=user.c_dept) dept," % }; ^; F2 L$ O! \+ t" l2 d
+ " user.c_gzdh gzdh ": @* m: M5 B+ I! u0 _7 ]
+ "from " * n+ o6 U# }) b' A
+ " dt_aty.t_aty_user user " 9 f* b4 F1 t' t- V
+ "where "
- W) i/ U0 s! O0 E# ]. X" J + " user.c_dept like " + sName
' x8 M1 L6 j- c* O2 u/ n$ b + " and "
" w. ]. N5 Y" S: E" s9 W + " n_valid = 1 "
2 B/ u2 w' q' o' Z' y& w* w + " and "
$ C8 T9 J: Q4 ^4 M9 Z + " user.c_dept != -1 "
) q1 \) B @, E. \6 A + "limit " + iPage + "," + iPerPage;# @( t5 c( w2 e% s
那么这个代码大家满意么?3 Y/ p9 q. A7 y' ~% d8 ~+ A" r
还是有人会说,还可以改进,那么好的。
0 b2 z$ ~8 q( K继续看代码:
) ]+ T9 q- i; _* U- p4 {1 I复制内容到剪贴板1 r8 k5 w: z- v2 M# R; M+ S
代码:0 }, ?: Z' W I. \: L% K4 h( C7 Q
int iPage = 0;$ L5 r. [* r+ D5 v3 K: Z* M
int iPerPage = 20;( b% J$ a( c4 W3 d6 n3 [
String sName = "admin";9 T6 @! _# F5 N8 {: }
String sSql = "select "
* B: ^* h- A1 l2 U; e, f0 y( Z5 ^/ I + " user.c_name name, " * R4 F: @# E* U$ d- v6 y. G ^* S! p
+ " (select dept.c_name "
* d4 |5 W1 u' h + " from db_aty_t_aty_dept dept "' Q! p. N# N( X
+ " where "
/ z9 \& |7 J7 R3 I; r. m! C9 s9 o* f + " dept.c_id=user.c_dept) dept," " R9 x& s; w0 w
+ " user.c_gzdh gzdh "
) G3 d' g- C, @" m6 Z + "from "
6 m% D' s/ F |* h3 P! y# k- ?$ e + " dt_aty.t_aty_user user " 2 B6 F. s# L( y5 ?
+ "where " 9 g( T$ f$ c& ]- E; }
+ " user.c_dept like ?" 3 ^3 P" z2 f3 w1 n& W! f" x' |
+ " and " 8 g0 w- I9 B6 E& X
+ " n_valid = 1 "
: X5 l7 O& V( d + " and "
& G& H, D. Z5 S1 A( Z# M7 F + " user.c_dept != -1 "
; b$ `- l G* b# n + "limit ?,?";, r# y) u$ ^+ {0 [7 F+ S4 f% _
这个可以了吧!还是有人会说,我还可以改进,那么恭喜你。
$ |1 v6 D- @! x看最后一段代码:
" |% C1 K. \) ?! D- b2 J复制内容到剪贴板
. J& b; s7 T3 p* Z* V9 h代码:: _/ \7 K( c- h6 ^; N5 o
int iPage = 0;
! ^7 \0 j+ |9 s- B0 M( u int iPerPage = 20;
: H" p5 i2 h7 D$ H6 ^% Z7 O0 ~ String sName = "admin";
! t9 L) l6 k/ c& S StringBuilder sbSql = new StringBuilder();6 ?$ Q6 a/ |5 `. q! y( _; l
sbSql.append("select ");
$ o4 N5 Z( r3 ~+ E1 \4 ? sbSql.append(" user.C_name name, ");
$ Y# _& K$ k. y! _' o sbSql.append(" (select ");
3 b7 O. `* ]/ x- v3 { sbSql.append(" dept.c_name ");- L# D# U6 ]) l8 v# C
sbSql.append(" from ");
5 [" C/ B0 z g B1 @, u sbSql.append(" db_aty.t_aty_dept dept ");
- J) s7 n& M4 z/ g b( M& ~ sbSql.append(" where ");; `2 Z6 e' J4 i$ V
sbSql.append(" dept.c_id=user.c_dept) dept, ");
7 ]* D! c/ z1 Z sbSql.append(" user.c_gzdh gzdh ");( r! E4 v5 d& B; J0 [
sbSql.append("from ");
% \2 b, W" ^+ ^# S/ B3 X9 j6 C6 B sbSql.append(" db_aty.t_aty_user user ");
: l0 _/ E0 l% [) I5 E( U9 _* l6 m sbSql.append("where ");
, O9 k% `* \, }1 w, b8 Q& b4 w8 S+ A sbSql.append(" user.c_dept like ? ");8 I& y! |8 Y( t- a5 U2 |6 y
sbSql.append(" and ");
7 Z7 |6 U# v& \9 i+ i sbSql.append(" n_valid = 1 ");
- W: m' o7 T" g8 u! f3 a sbSql.append(" and ");8 n8 A2 M. ?, H+ \) A0 }
sbSql.append(" user.c_dept != -1 ");- N6 U: N) l, K6 s' G
sbSql.append("limit ?,?"); v# M# ]& s- o( F2 p
看过这四段代码大家,可能会有疑问,这是为什么呢?( M- z; e( H6 {6 C$ B- m1 p& S# I
我总结了几点:9 F! x: B( _4 V& }; a N
1、大家可能注意到了变量的命名方式,可能大家平时写代码的时候注意不到这个,不过这也是个人的习惯问题的。其实按照自己的命名规则来写没有问题,问题在于我们在工作中写的代码不会只有自己看的。后期维护的人员也会看的,这样可以让维护人员直观的了解变量的数据类型。
" {# ]+ N0 c" V: S* ]5 P* ?* W
1 ]4 f' S% n2 {; [2、为什么不用字符拼接而是用通配符?很多的答案我相信都是一致的,没错就是防注入。但是可能很多意识不到还有一个问题就是数据库解析。数据库接受到程序传入的SQL语句的时候,如果是拼接的字符串数据库会自动进行解析工作,那么大量SQL涌入的时候,效率就可想而知了。
* l8 I% V+ d/ L4 m5 A2 _- h1 O$ H( J$ N
3、为什么摒弃了最熟悉的String类型而是用StringBuilder类型。我们首先来看String类型定义的特殊性,如果用new的方式我就不用说了,大家用new的方式定义String类型的时候比较少,即使是那么定义了。大家一定会知道只要是new就一定会创建一个字符串。
: o D; _2 H" a3 `" n, }. F2 `% f9 n9 Q! j& M
字符串拼接的过程,先搜索字符串池中字符串对象。如果存在就会把该字符串地址赋值给定义的字符串变量。如果不存在就会重新创建对象。在这种拼接的过程中创建很多对象,那么对性能要求比较高,而且效率很低下。5 W. S9 N* c3 M# b3 Q- I% M3 s) W
还有人可能问了,为什么不是StringBuffer,因为这里不需要线程安全,只要效率。所以选择StringBuilder就可以了。& u( m' A3 P* M' }2 e. y# a9 S% }
5 I, z5 m. I8 W4、最后一个可能是大家不太注意的问题就是,SQL的格式。一段良好的代码它的可读性是最珍贵的。说一个人有多牛,不是说这个人可以写出别人看不懂的代码,而是看有多少人可以读懂他的代码。所以SQL的格式也非常重要。" l: k( o/ W, N- I5 w, y
- F: c" \' R8 u$ y0 _! L0 V8 Q+ P
/ m% m; B1 S2 I$ }3 L$ s$ a看沙发吧!我不知道我写帖子里面带有什么词语了,就是不能通过。
3 t; V' e! a! G. w) K% w
, k- g, q* z- J8 q" ]. w这次就说这么多,我希望大家多多参与进来,不过看昨天大家回复的帖子。很多人愿意被动的接受知识,而不愿意去主动探索去寻找知识。这样的态度是不对的,希望这个帖子可以让更多参与进来,不是我一个人写,而是所有人写。写出自己对编程的思考,自己的想法,自己的技巧。
$ O9 U; I- F7 O7 e) c5 |
: y+ ?3 @0 ^) r3 _
/ J% h) q+ g3 |9 h1 n" W |
-
总评分: 帮币 + 2
查看全部评分
|