TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
废话少说先上代码:
$ R- Z! z! _% M$ E7 _6 J' E复制内容到剪贴板
8 Z" l* x; D& G: a代码:
9 ~5 L& P! x% \6 A+ uint iPage = 0;
: l8 D4 ~; C3 v0 D7 P int iPerPage = 20;
2 a% |0 J' i0 w; ~+ j! h String sName = "admin";
5 x, }$ t! p- D5 Q5 T 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 "
3 u+ X% V" s% P) a/ X + sName + " and n_valid = 1 and user.c_dept != -1 limit " + iPage + "," + iPerPage;3 b; `0 D/ z# {
大家写的代码是不是这个样子的呢?( I$ B" U l/ B
我相信很多人会说,我的代码比这个写的好多了。
( U! H* e5 V; b/ w好的看下面的代码:
' L5 f& k+ M L& o- P9 F复制内容到剪贴板/ }* _: l0 h# x
代码:+ }9 P7 w ~& `/ b$ i8 V4 Q
int iPage = 0;
7 }! k* t9 E$ |+ P$ y int iPerPage = 20;2 @! d+ k/ }3 b+ q9 l
String sName = "admin";) P$ y9 }' j' B0 T
String sSql = "select " : f% ^% ]# T* E: {5 n
+ " user.c_name name, "
! _5 z* S3 ]% ~3 R + " (select dept.c_name "' R; g+ v$ g+ E3 H6 n
+ " from db_aty_t_aty_dept dept "
+ ^2 \ s6 Q$ F" h5 x x + " where " 7 O x( c& ^! W8 M
+ " dept.c_id=user.c_dept) dept,"
- `( G3 d$ d7 J) e9 R + " user.c_gzdh gzdh "
1 U1 k. k2 f6 i7 X( x + "from "
1 x. d/ G# Q- J- o. z + " dt_aty.t_aty_user user "
; m- B2 N/ K) }2 }; _ + "where "
) c4 Q2 p" l a- m+ ^ + " user.c_dept like " + sName
; r+ [$ p- U1 A2 t& k8 G + " and "
1 J: H2 l1 b% v! o; T: u) f1 r7 k+ K + " n_valid = 1 "
5 F8 z$ u2 Q' N2 B( l* X4 Y8 M + " and "
& r% X' L: z7 }* w. D3 p" W + " user.c_dept != -1 " 2 i# S/ i1 Y; o
+ "limit " + iPage + "," + iPerPage;. q. c' M+ Z2 T) B# L9 p
那么这个代码大家满意么?# }& o8 e1 |5 y# ?0 x2 C8 z( t
还是有人会说,还可以改进,那么好的。, ]7 g" l* W' {! P: B
继续看代码:
* K: K# w8 _5 t& X" I& `复制内容到剪贴板* |8 H' Y' f6 l2 l3 h, D
代码:
3 w/ p$ g0 c+ v ?' p6 N( eint iPage = 0;2 G8 V4 X* q( z3 m6 t% Z) S" ~
int iPerPage = 20;
0 z* m# @* d$ @0 G+ D String sName = "admin";9 y" K$ N( a# b# Y9 ?
String sSql = "select " ; A: g$ U$ Q* _" X
+ " user.c_name name, "
; f9 w8 B) g! M + " (select dept.c_name "
3 S8 \/ P" \" Y. u, q. j + " from db_aty_t_aty_dept dept "
# Z' _0 D: w+ I9 j9 a) ?5 o + " where " $ n1 W4 A% M3 t
+ " dept.c_id=user.c_dept) dept,"
5 B/ i. ~( `! |( `" B* N1 X( i + " user.c_gzdh gzdh "
3 `8 y1 Y- X1 X* h: M- k7 C1 J + "from "
& L6 r1 B# \' X# U* N) u + " dt_aty.t_aty_user user "
' S, ?. c; k6 K3 R6 F. w + "where " " U- ~/ R' D' U% z
+ " user.c_dept like ?" . i4 X) T/ B' v' R( M, c+ |" S# \
+ " and " 4 t+ N# n8 B0 ^! R$ P' b# M
+ " n_valid = 1 " ) g' E/ E% W+ [% B6 H, W* E: n
+ " and "
% {$ _- f9 S; m. j$ O + " user.c_dept != -1 " & W; } R2 h* g9 O' J
+ "limit ?,?";
& J( ~/ S/ V7 H/ x' E/ Y1 l这个可以了吧!还是有人会说,我还可以改进,那么恭喜你。: } u/ \7 R. s& T6 O
看最后一段代码:+ m3 y. m+ C4 @8 h
复制内容到剪贴板- G4 A2 U, h# }: U+ Q8 n4 E
代码:, n8 k. J W) @ p7 C
int iPage = 0;
. C& f' P" }2 [+ F, v5 o4 a3 r0 t# g int iPerPage = 20;- m, O8 L @7 _, U$ \/ F: g& W6 b3 @
String sName = "admin";+ s5 Y/ g9 s* o: o
StringBuilder sbSql = new StringBuilder();
) J. C% @ ^; |* L sbSql.append("select ");0 f Y) Q" @4 K! c: P* S
sbSql.append(" user.C_name name, ");( _2 I( O2 F) N8 ?0 f& S) S
sbSql.append(" (select ");
$ t; j u/ I( Z q, v, ^9 j3 P; d sbSql.append(" dept.c_name ");) K |5 [$ A& z" s
sbSql.append(" from ");6 U6 F: Q( ? g H; D
sbSql.append(" db_aty.t_aty_dept dept ");
" K/ N8 o f4 D3 v+ ^ sbSql.append(" where ");& w4 C" ?* g$ p- r- U3 J% y+ _
sbSql.append(" dept.c_id=user.c_dept) dept, "); w* e! D' K/ a# ?$ `
sbSql.append(" user.c_gzdh gzdh ");- B" A3 q$ H E1 e* O
sbSql.append("from ");& H: q7 y% E3 C* {/ x9 ]8 J
sbSql.append(" db_aty.t_aty_user user ");" h7 Q, b4 g3 U7 q
sbSql.append("where ");4 B3 y* q' ?4 d$ S! D, s
sbSql.append(" user.c_dept like ? ");
$ d, }, b1 v6 O2 N4 V sbSql.append(" and ");7 u* n" @) n" m0 u% Q/ U7 {: L( G
sbSql.append(" n_valid = 1 ");* U; w8 E# F: u- J B- E5 t" G( w
sbSql.append(" and ");
8 Y) q) M! J6 p0 A6 {# b3 w& d sbSql.append(" user.c_dept != -1 ");
& ?. u* X) [8 [8 ] sbSql.append("limit ?,?");5 u7 C& F4 V6 b1 U6 n. m" B* L
看过这四段代码大家,可能会有疑问,这是为什么呢?* Q- M6 ~9 j( C6 I E% T% |; \
我总结了几点:) X! W9 V' t9 ^# b
1、大家可能注意到了变量的命名方式,可能大家平时写代码的时候注意不到这个,不过这也是个人的习惯问题的。其实按照自己的命名规则来写没有问题,问题在于我们在工作中写的代码不会只有自己看的。后期维护的人员也会看的,这样可以让维护人员直观的了解变量的数据类型。; x0 q) c/ `. _
( t/ a7 L3 V7 }4 X- [+ g' s2、为什么不用字符拼接而是用通配符?很多的答案我相信都是一致的,没错就是防注入。但是可能很多意识不到还有一个问题就是数据库解析。数据库接受到程序传入的SQL语句的时候,如果是拼接的字符串数据库会自动进行解析工作,那么大量SQL涌入的时候,效率就可想而知了。
. E% H1 V9 o! w" ?; m% ^
[9 Y+ f/ s/ Q$ \. d: O! r3、为什么摒弃了最熟悉的String类型而是用StringBuilder类型。我们首先来看String类型定义的特殊性,如果用new的方式我就不用说了,大家用new的方式定义String类型的时候比较少,即使是那么定义了。大家一定会知道只要是new就一定会创建一个字符串。2 }5 d) r9 T9 B* ^0 G7 ]: L
) {( e$ {5 h/ M, z& l
字符串拼接的过程,先搜索字符串池中字符串对象。如果存在就会把该字符串地址赋值给定义的字符串变量。如果不存在就会重新创建对象。在这种拼接的过程中创建很多对象,那么对性能要求比较高,而且效率很低下。
2 s2 b' X' O; ~* F: Z( ~还有人可能问了,为什么不是StringBuffer,因为这里不需要线程安全,只要效率。所以选择StringBuilder就可以了。' V9 Q$ F2 ^# W. {9 _
1 w( a& b* d/ f# p: e4、最后一个可能是大家不太注意的问题就是,SQL的格式。一段良好的代码它的可读性是最珍贵的。说一个人有多牛,不是说这个人可以写出别人看不懂的代码,而是看有多少人可以读懂他的代码。所以SQL的格式也非常重要。! Z( R7 D% d, r& {0 z
1 G/ \6 D, K4 e% a: p& P
# B: X+ A. |. H% K, a8 w
看沙发吧!我不知道我写帖子里面带有什么词语了,就是不能通过。3 V1 b& p) v1 }4 d' \
& R8 ?& q# H7 G0 m4 J# p& l* s8 J这次就说这么多,我希望大家多多参与进来,不过看昨天大家回复的帖子。很多人愿意被动的接受知识,而不愿意去主动探索去寻找知识。这样的态度是不对的,希望这个帖子可以让更多参与进来,不是我一个人写,而是所有人写。写出自己对编程的思考,自己的想法,自己的技巧。
8 I* P' ~" }9 v, y
: M. N( N2 b7 {$ ?( J! h0 g
( s+ @# ^4 ]7 M6 r0 s |
-
总评分: 帮币 + 2
查看全部评分
|