TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
废话少说先上代码:
, C( ~/ U1 k; w. j" N复制内容到剪贴板2 @. A, ]8 g' c, Z1 O
代码:
' l$ \% X, ?' h5 s' l+ L; ?( cint iPage = 0;
$ q$ ]9 q- {: x+ ` int iPerPage = 20;
, O9 C2 D$ q: T+ K6 ^ String sName = "admin";
* b8 x' S! p: T' h7 F& e9 }6 ^ 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 "" I$ O0 u+ U. X8 y( I( m! ]) b9 m
+ sName + " and n_valid = 1 and user.c_dept != -1 limit " + iPage + "," + iPerPage;
2 J- K' R( E5 s- K大家写的代码是不是这个样子的呢?
; h5 @0 I/ @7 c9 n我相信很多人会说,我的代码比这个写的好多了。
6 Z, N8 [; z# d* ?好的看下面的代码:
3 @- [, T' |7 f8 u9 G复制内容到剪贴板
! c8 G$ K& q: c% e9 k: r代码:$ J* z m, A5 l& |) C
int iPage = 0;* |, @ }2 _* H2 C/ T7 O' }$ Y
int iPerPage = 20;
" ~2 g5 B' d1 J' C String sName = "admin";
( l, s; }! [* q2 v! R2 c+ e String sSql = "select " 3 w' W5 w8 x9 S V5 R: m
+ " user.c_name name, "
% K" C" S$ b+ R: ^$ R k0 l + " (select dept.c_name "
3 q: c2 q: [$ s* G5 D* r + " from db_aty_t_aty_dept dept "
2 L, i* `) k4 L$ P, X5 n1 V8 K + " where " . u1 j$ Z/ V a9 F: F5 S* o
+ " dept.c_id=user.c_dept) dept," 0 b& P% y1 X) R1 M
+ " user.c_gzdh gzdh "
* i1 `* K+ u+ e$ p + "from "
7 u0 ~2 n" q) E/ S/ U( ~: P8 X + " dt_aty.t_aty_user user " . q# `* z$ q9 c% o: h, A1 C, x" ^
+ "where "
5 j' m- ~2 O1 ] W + " user.c_dept like " + sName
- Z' F7 M% R5 E( ` a' s2 S$ S0 J$ e! R + " and " ' J- t' i1 g- B( N. O
+ " n_valid = 1 " + m- [, F3 [. h' }
+ " and " 1 h5 R5 p: Y ^* Q
+ " user.c_dept != -1 "
; A4 [; b6 ]" w q + "limit " + iPage + "," + iPerPage;# U* b* |% v) F+ e, E1 j4 N4 W2 m7 k
那么这个代码大家满意么?3 |$ D" W) w$ D1 c |
还是有人会说,还可以改进,那么好的。
# V( ]2 A" a) k) h+ s继续看代码:
7 P, e! z7 O3 ^2 |! N+ W复制内容到剪贴板3 @- s: `0 r* ?/ T* w. l0 B0 X
代码:
5 Z O8 b: D7 ?$ @) Uint iPage = 0; ~9 g% c, K" l4 j/ ?; ^9 `" M
int iPerPage = 20;
& L& I$ x8 _6 t, l3 J6 R String sName = "admin";3 u' j- H6 v2 r
String sSql = "select "
7 E0 q4 y. w& N D2 E + " user.c_name name, "
/ k* j+ t8 ]# A + " (select dept.c_name "4 ~) B9 {" p6 z5 }) i" N
+ " from db_aty_t_aty_dept dept "/ Z2 o1 R0 {9 N y. y8 Q5 n
+ " where "
( s( v( Z# K9 f* A# t + " dept.c_id=user.c_dept) dept,"
- r( o9 G. D% [% T9 ?; f" W Q- j + " user.c_gzdh gzdh "7 {, [8 A0 {2 ^, [( U
+ "from " ) ^) I; O$ W2 x! B5 U' b, z" R! M8 o+ z
+ " dt_aty.t_aty_user user " # B+ W2 I) A. L$ w( T
+ "where "
9 B% r2 \3 ~, g7 m + " user.c_dept like ?" ' {/ C2 ^6 S1 `0 t( M v$ j
+ " and " # Y3 k- d. x, i9 }! Z
+ " n_valid = 1 " . T3 u4 v W+ ]& q2 u8 u0 W
+ " and " 3 Y* k% ^ y: D( z$ M# Y4 }7 {# H0 S
+ " user.c_dept != -1 " $ H* a( {# }* t2 ^
+ "limit ?,?";% j1 u" n& V1 {% {! N8 d
这个可以了吧!还是有人会说,我还可以改进,那么恭喜你。
. R# K% ~" P% b+ q' J看最后一段代码:
* [3 Z7 n. G, u复制内容到剪贴板
- {% L( `4 _: N2 b% S1 x代码:# b. j+ K* F) ~$ w p( ^ @) e1 y
int iPage = 0;
& |. L8 t y- E/ s: h2 i& }% T. ~ int iPerPage = 20;
. W- J$ Y" L& s String sName = "admin";
2 T& Q4 `2 Q+ t* P( A9 l, t# \) s StringBuilder sbSql = new StringBuilder();" G ?5 E8 I2 }4 W; D! v9 d
sbSql.append("select ");
% Y9 ]4 p4 l. j& L" V! I sbSql.append(" user.C_name name, ");% {4 U# k& E0 n$ m
sbSql.append(" (select ");
0 l5 F7 o9 ~* z! W6 |# H sbSql.append(" dept.c_name ");$ D# N z$ ^* v9 |" ^# r
sbSql.append(" from ");
) D1 E% x1 P! M( M+ \ sbSql.append(" db_aty.t_aty_dept dept ");* ?9 M+ c& y3 ~' [4 G' _7 L8 K
sbSql.append(" where ");
/ A) H# |2 z' B+ v1 ] sbSql.append(" dept.c_id=user.c_dept) dept, ");0 k; f& l: W$ W
sbSql.append(" user.c_gzdh gzdh ");1 P( R& j: M) @% M2 S& W' o3 y4 }& |* ?
sbSql.append("from ");2 J1 r# @) [, e1 x1 k0 _7 y6 I y
sbSql.append(" db_aty.t_aty_user user ");
* Z3 M S, ^) K% T: E$ O sbSql.append("where ");9 r& \" H) P* {( q6 A c
sbSql.append(" user.c_dept like ? ");
/ P3 I! H/ j9 F* M, } sbSql.append(" and ");
9 J) Q/ m* V+ I, o) Q- [ sbSql.append(" n_valid = 1 ");
( p$ F8 Z) y1 c X. X3 T sbSql.append(" and "); z$ ^ H% u6 T" h7 L' g5 q! j
sbSql.append(" user.c_dept != -1 ");" a! t% @ T+ s3 K% f
sbSql.append("limit ?,?");; K' R' W; W7 u; j F( B+ _/ D) v
看过这四段代码大家,可能会有疑问,这是为什么呢?; l1 n; R3 F8 [7 I& ~0 i" |0 y; a
我总结了几点:
2 A, l& i& V+ R0 T9 U2 Q! d1、大家可能注意到了变量的命名方式,可能大家平时写代码的时候注意不到这个,不过这也是个人的习惯问题的。其实按照自己的命名规则来写没有问题,问题在于我们在工作中写的代码不会只有自己看的。后期维护的人员也会看的,这样可以让维护人员直观的了解变量的数据类型。
! z# L4 n# b9 N" {0 r$ c4 `1 e
5 H' P6 q, J0 X/ s9 h2 S; ?! f( E2、为什么不用字符拼接而是用通配符?很多的答案我相信都是一致的,没错就是防注入。但是可能很多意识不到还有一个问题就是数据库解析。数据库接受到程序传入的SQL语句的时候,如果是拼接的字符串数据库会自动进行解析工作,那么大量SQL涌入的时候,效率就可想而知了。
6 V9 P1 s, s$ _2 m, n) u7 S1 }5 i
Q/ A, F, |+ R! R3、为什么摒弃了最熟悉的String类型而是用StringBuilder类型。我们首先来看String类型定义的特殊性,如果用new的方式我就不用说了,大家用new的方式定义String类型的时候比较少,即使是那么定义了。大家一定会知道只要是new就一定会创建一个字符串。
. U4 }* E( Y( k/ V; A* z: h$ x" u6 E# I" O" B, q
字符串拼接的过程,先搜索字符串池中字符串对象。如果存在就会把该字符串地址赋值给定义的字符串变量。如果不存在就会重新创建对象。在这种拼接的过程中创建很多对象,那么对性能要求比较高,而且效率很低下。
! D7 S. Y0 V0 W+ q4 _( w还有人可能问了,为什么不是StringBuffer,因为这里不需要线程安全,只要效率。所以选择StringBuilder就可以了。. ~1 h) h6 R& Z6 Q; G: |, }+ U; I
. y- _2 ~* R# F4、最后一个可能是大家不太注意的问题就是,SQL的格式。一段良好的代码它的可读性是最珍贵的。说一个人有多牛,不是说这个人可以写出别人看不懂的代码,而是看有多少人可以读懂他的代码。所以SQL的格式也非常重要。) \" L, L; {6 b
* x$ X& ^& x7 C7 u2 Y* |* f6 Q; [; g$ \% H
看沙发吧!我不知道我写帖子里面带有什么词语了,就是不能通过。. X0 L- \" A. e
0 T0 l9 M- @, U9 M
这次就说这么多,我希望大家多多参与进来,不过看昨天大家回复的帖子。很多人愿意被动的接受知识,而不愿意去主动探索去寻找知识。这样的态度是不对的,希望这个帖子可以让更多参与进来,不是我一个人写,而是所有人写。写出自己对编程的思考,自己的想法,自己的技巧。
, ~! v" p" T8 Y' U9 x
% Y; |# m. H: D ^6 x$ [) g4 M
0 y* `) n" }9 H7 q7 W! Y |
-
总评分: 帮币 + 2
查看全部评分
|