TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
废话少说先上代码:
' b. O5 S9 c* |2 A2 V- }' n) \复制内容到剪贴板/ d1 N) D/ @- W; [ L
代码:: p; A5 w2 r1 _/ f( i3 k5 m f7 k
int iPage = 0;2 O6 s! t: O6 e" |5 t$ C8 n w
int iPerPage = 20;
; J9 _& j5 m" m; ` String sName = "admin";/ a3 ?0 U* ?0 V, k& r
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 "6 H/ ]+ u0 _, B b5 M# w: s! |9 ?
+ sName + " and n_valid = 1 and user.c_dept != -1 limit " + iPage + "," + iPerPage;* J' o- ]7 j2 y" F; j B
大家写的代码是不是这个样子的呢?& }' Y2 z5 l; t9 w1 g! Z2 `. l
我相信很多人会说,我的代码比这个写的好多了。
' O+ H1 ]: ~! S! ]好的看下面的代码:% R- `: A+ J( E1 j8 P; O2 L
复制内容到剪贴板
" T( l1 l$ ]$ ?! C& N$ N8 y: K: j代码:
& `8 q# K# a8 v% S1 zint iPage = 0;" H L7 D% \. ?. c* @9 k
int iPerPage = 20;
8 _$ P2 ?) w2 @& H! y0 x0 B String sName = "admin";
& g: i* o N" `5 o9 {$ ] String sSql = "select " 5 P: V6 s# h4 S+ ^7 w- r
+ " user.c_name name, " ! e7 G0 h) M) q: M
+ " (select dept.c_name "8 v6 m& L& K6 d( \9 v
+ " from db_aty_t_aty_dept dept "3 N* a; m* U# J* R. |
+ " where " - F$ a" |. q& X4 C) b: w! q
+ " dept.c_id=user.c_dept) dept,"
* f" o9 _* n) c! Y/ { + " user.c_gzdh gzdh "# G7 T8 i( C+ S4 Y% W; q7 M9 F
+ "from "
3 T: y& }0 U% S: Z& Y* g2 i + " dt_aty.t_aty_user user "
: h! F6 ^% m. g, V' z + "where "
( `5 r- a3 ]! e4 f0 B s& J4 K + " user.c_dept like " + sName
7 G5 ^) P7 ]0 s1 ? + " and "
5 H8 E0 ]/ P6 N + " n_valid = 1 " 6 r: E" u; _; n2 A9 p. S4 p8 }
+ " and "
" w8 o- c( C, U: w# N' G + " user.c_dept != -1 "
' b! X' S8 C9 e- B( x9 Q5 g + "limit " + iPage + "," + iPerPage;, j5 O4 A2 b8 m
那么这个代码大家满意么?6 W) l) B' P1 |! r
还是有人会说,还可以改进,那么好的。
( R' T* H5 ^7 E8 v/ t+ S4 T继续看代码:% Z. m% q6 a' ^ Z2 ]3 Q
复制内容到剪贴板 O5 }! y2 S4 R! L/ B* \4 _: |
代码:
1 D1 s0 _7 `/ v; aint iPage = 0;
5 j$ {/ g! M/ ]: X4 @& X int iPerPage = 20;
+ k6 Y+ V4 X: A String sName = "admin";9 B& f# M( A: ?7 ^
String sSql = "select "
. }" A3 X( u2 q7 `0 G$ G$ H + " user.c_name name, "
) N; Q& x( f6 t# D + " (select dept.c_name "
0 [% N% P. i3 [& P4 K m + " from db_aty_t_aty_dept dept "
0 D; t& {& ?7 D& z3 _, ~ + " where " 2 b8 X: H8 f& I- I2 P& ~7 p) ?
+ " dept.c_id=user.c_dept) dept,"
$ u# a. \% C$ g: n) [" M; \0 p + " user.c_gzdh gzdh "
4 }$ P$ \' h( W- V1 u" @& T + "from "
3 o3 D: E% {; O; s/ O* j* B( i + " dt_aty.t_aty_user user " : b8 N8 q3 K) \$ b) x3 l
+ "where " - e1 U9 a# n) c7 e1 ~% ^$ Y
+ " user.c_dept like ?"
- g' r2 B" T$ o7 W9 e + " and "
( @6 E# p) J) p0 t; g& j* g- C; x + " n_valid = 1 "
8 w+ T9 [9 C+ @ + " and "
' f: x u2 S- V% N" U + " user.c_dept != -1 "
: y( A" N. _! Z6 Y + "limit ?,?";
D3 ~# K i9 v% |7 t' q这个可以了吧!还是有人会说,我还可以改进,那么恭喜你。
3 v- T. c# _- ?看最后一段代码:( w! }4 d ~! c) m
复制内容到剪贴板
' ~7 z4 \: k" {$ l4 w4 \1 N代码:
7 [& D9 ~- s$ N( e/ ]& A. j" fint iPage = 0;( R* L( f' y$ ?' q e- M: |! l$ g
int iPerPage = 20;
8 Q V/ k# T* P6 _- ~0 i String sName = "admin";( Z( ^4 x/ v7 j: M9 O0 G
StringBuilder sbSql = new StringBuilder();, A6 Z, B& v# w' g0 Z3 N4 l0 Q
sbSql.append("select ");& v& W$ i. u+ J# S/ ^& z. {
sbSql.append(" user.C_name name, ");
, E& x4 r+ a+ p d( C4 | sbSql.append(" (select ");1 a# U7 O4 a0 n9 J8 l: Y. k; e4 c
sbSql.append(" dept.c_name ");+ k. s) H8 i" \$ a( ~0 C+ q
sbSql.append(" from ");2 I$ P k4 ?( ~- r: P$ p8 E+ W
sbSql.append(" db_aty.t_aty_dept dept ");" h) B- z$ ]) m. |
sbSql.append(" where ");
- y4 q: p% o5 _) \$ Z' Q: ~ sbSql.append(" dept.c_id=user.c_dept) dept, ");
5 w" V) ]/ R; W2 t# ~# ^4 v% F sbSql.append(" user.c_gzdh gzdh ");
: N: a8 X+ s2 E6 f' W sbSql.append("from ");9 A) f! q8 f L! S& Q2 `
sbSql.append(" db_aty.t_aty_user user ");
3 p: W5 E$ w1 D8 ^! V/ c& [" } sbSql.append("where ");1 q& R6 n- y9 _/ q7 |
sbSql.append(" user.c_dept like ? ");
& S2 n6 x9 M0 B5 }+ t" Z sbSql.append(" and ");, m* B7 l" W, d7 |! x) Q0 q
sbSql.append(" n_valid = 1 ");
! G, S `( w0 T( c sbSql.append(" and ");4 @1 H, O- B# U7 I4 t: t% Z
sbSql.append(" user.c_dept != -1 ");. u5 W8 t, |" h7 G3 X" n
sbSql.append("limit ?,?");3 T6 ]. w- Q6 m {7 p) w6 k8 ~
看过这四段代码大家,可能会有疑问,这是为什么呢?' @3 @; P i& ~% @8 u0 }6 ~
我总结了几点:" Y. r4 K e6 ^1 M
1、大家可能注意到了变量的命名方式,可能大家平时写代码的时候注意不到这个,不过这也是个人的习惯问题的。其实按照自己的命名规则来写没有问题,问题在于我们在工作中写的代码不会只有自己看的。后期维护的人员也会看的,这样可以让维护人员直观的了解变量的数据类型。
; @8 m! `4 ~' Q$ f3 J7 a3 i! z3 L8 d
2、为什么不用字符拼接而是用通配符?很多的答案我相信都是一致的,没错就是防注入。但是可能很多意识不到还有一个问题就是数据库解析。数据库接受到程序传入的SQL语句的时候,如果是拼接的字符串数据库会自动进行解析工作,那么大量SQL涌入的时候,效率就可想而知了。' ?, e5 z- Q9 L# k; D" b2 w
# j/ W0 {5 F7 u
3、为什么摒弃了最熟悉的String类型而是用StringBuilder类型。我们首先来看String类型定义的特殊性,如果用new的方式我就不用说了,大家用new的方式定义String类型的时候比较少,即使是那么定义了。大家一定会知道只要是new就一定会创建一个字符串。$ M) R# E( r3 F
8 d" H8 Y6 X3 \' H/ o; D& \
字符串拼接的过程,先搜索字符串池中字符串对象。如果存在就会把该字符串地址赋值给定义的字符串变量。如果不存在就会重新创建对象。在这种拼接的过程中创建很多对象,那么对性能要求比较高,而且效率很低下。
" Q7 m8 x3 J7 ]$ }1 ^还有人可能问了,为什么不是StringBuffer,因为这里不需要线程安全,只要效率。所以选择StringBuilder就可以了。6 a* V7 V( H$ f Y' I
! s, q. c( f5 Q& E$ _# ]4、最后一个可能是大家不太注意的问题就是,SQL的格式。一段良好的代码它的可读性是最珍贵的。说一个人有多牛,不是说这个人可以写出别人看不懂的代码,而是看有多少人可以读懂他的代码。所以SQL的格式也非常重要。
# p3 M8 f" ~/ c w; \4 k& F! f
, f/ \0 r. T- Z, ~
) Z# b _4 o! F, [( W' z* }; c看沙发吧!我不知道我写帖子里面带有什么词语了,就是不能通过。# H1 r9 U/ W/ k/ t" B, v2 Y+ h
$ N2 z% |. P9 K$ n/ o( m这次就说这么多,我希望大家多多参与进来,不过看昨天大家回复的帖子。很多人愿意被动的接受知识,而不愿意去主动探索去寻找知识。这样的态度是不对的,希望这个帖子可以让更多参与进来,不是我一个人写,而是所有人写。写出自己对编程的思考,自己的想法,自己的技巧。
5 f3 @4 z8 N" s- L5 K: v
8 l0 L9 ?# p' m9 j
' n) M E" j4 |: \7 H% w2 a |
-
总评分: 帮币 + 2
查看全部评分
|