TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
废话少说先上代码:! ~: ?) n2 a. G8 Q5 B2 y+ |
复制内容到剪贴板: A6 Q& Y8 K/ L6 @% d
代码:( \9 [8 q2 a& q
int iPage = 0;+ g% ^! a# t9 m; Y
int iPerPage = 20;
' q2 r3 ~3 m% n0 v: r& y$ u String sName = "admin";0 h% `- d% \" Y
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 "( t% F! N% Y7 b) d; s6 j" x! b2 d
+ sName + " and n_valid = 1 and user.c_dept != -1 limit " + iPage + "," + iPerPage;
7 x2 J+ q p' J5 d* X# h! P大家写的代码是不是这个样子的呢?
F; N! d( ~, K我相信很多人会说,我的代码比这个写的好多了。
3 ?7 @, ]' ]' e% i+ N, k9 X# t好的看下面的代码:
. z- F3 ~0 L6 i: l( o9 _( B复制内容到剪贴板( D; f2 x$ [8 \" B" w
代码:
9 o' E6 _ M* S7 `1 F7 Xint iPage = 0;. o# ^) L/ y$ w9 k2 l) a
int iPerPage = 20;
. _) L9 ]3 d: r/ L J3 D String sName = "admin";4 E. a4 N; N4 c& \
String sSql = "select "
* A9 c7 ]7 A# S) d3 a6 |& C# ~% B+ q + " user.c_name name, "
) Q1 d# z' I# f% K5 {8 C + " (select dept.c_name "
2 T$ @5 @0 F. N( K' B- Q + " from db_aty_t_aty_dept dept "8 Z# i5 n/ x5 I* G% a. X$ A) p
+ " where " 2 Z/ n# Z- U) L. j9 j
+ " dept.c_id=user.c_dept) dept," * n f* s5 [; |9 q
+ " user.c_gzdh gzdh "
0 w% m d( v/ F. o0 v7 {) b1 s& g + "from "
3 v; _$ j* @* K: e; I( P( S s5 D + " dt_aty.t_aty_user user "
, J2 a9 N. ^8 c8 e/ O0 F + "where " 0 h% A6 _6 Y0 O( n
+ " user.c_dept like " + sName
+ W3 I6 J/ e: J& f + " and " - h" W) Y4 X3 i
+ " n_valid = 1 " ( Y B- a- w% \4 @7 K9 O
+ " and "
0 q. X' d2 n8 l* c$ Z- a. r/ Q# k + " user.c_dept != -1 "
- K1 D0 e4 b2 |$ `, q! F + "limit " + iPage + "," + iPerPage;
: v; E% N/ _, b3 g; f/ e' a那么这个代码大家满意么?
" v' z+ ^7 a4 L9 X0 |1 t8 m/ J1 ^还是有人会说,还可以改进,那么好的。, A l% Y4 Q( @+ e* j8 n/ z
继续看代码:" J& J; ~4 e, ]) A: a+ E" v$ G
复制内容到剪贴板
3 ~( e' f! w; c( O; Z代码:9 G$ Z4 \% X5 H# K. u9 @
int iPage = 0;
6 Z; L3 ]+ s \( Y/ G int iPerPage = 20;
8 Y$ e8 c- `' j' C5 e$ V4 R String sName = "admin";, {7 c! P2 s" e9 S
String sSql = "select "
! t, d4 {) v6 q2 J4 t5 {3 E9 Y1 k$ @ + " user.c_name name, " * _ Y5 w% ]# {5 {1 }: Z8 T7 a
+ " (select dept.c_name " Z# W; _' h( | S# Z
+ " from db_aty_t_aty_dept dept ": Y1 F7 t7 T1 A+ e3 ]3 ]1 k4 q( q
+ " where " . Q/ V& C/ n' f2 O
+ " dept.c_id=user.c_dept) dept," , c+ q7 ]1 t' r d. v
+ " user.c_gzdh gzdh "4 d" b0 B& Y, G7 Y' p
+ "from " % l2 R; w5 \, o+ o6 {% [' W
+ " dt_aty.t_aty_user user "
1 f% W/ d3 Q0 @( B3 Z! G1 X) E1 K + "where "
7 I+ b$ N5 ^9 Y, h' w0 R + " user.c_dept like ?"
# g) W) S0 t: d! _& j- E + " and " " b# w+ s/ S) J+ e, M
+ " n_valid = 1 " ; \3 L3 y8 S$ j3 S2 Q' d+ l
+ " and "
: ?& x# F6 `0 A* t + " user.c_dept != -1 " 6 m3 S B9 |4 K
+ "limit ?,?";5 H4 N- E4 @7 q
这个可以了吧!还是有人会说,我还可以改进,那么恭喜你。' ?! k1 _+ B5 J+ ~0 |9 B
看最后一段代码:1 B, o* y* u8 t5 L4 c
复制内容到剪贴板- b' w6 _) a( Y) ?6 x8 D1 I
代码:
+ i+ U# e3 k4 u# _3 N- e+ Fint iPage = 0;
& U1 H1 o# W0 ?3 A int iPerPage = 20;
) z" y0 P! P- |1 e0 f( I: V1 \8 j String sName = "admin";
+ ~0 a# P# c# ?/ S" V# g! E StringBuilder sbSql = new StringBuilder();% ? t, b8 J$ w
sbSql.append("select ");: E0 E$ E4 M/ T( y$ O
sbSql.append(" user.C_name name, ");
% p8 E/ |, I$ u sbSql.append(" (select ");3 n* \" @9 v6 n+ C3 I+ \
sbSql.append(" dept.c_name ");
7 p8 t2 @) j' p; j9 F% E/ ~0 u& c1 W' n sbSql.append(" from ");2 k; k) B- K" G; x& I+ Q z
sbSql.append(" db_aty.t_aty_dept dept ");
7 \: e1 X! N4 k sbSql.append(" where ");
& Z+ l1 [% w1 U$ a% s3 |0 O sbSql.append(" dept.c_id=user.c_dept) dept, ");8 P# G/ O! }: B4 M; x4 u# u5 u/ H
sbSql.append(" user.c_gzdh gzdh ");
' y* [( x- L# m8 K* ^ z sbSql.append("from ");
* L7 ?7 T" J' D1 ^# ^7 s sbSql.append(" db_aty.t_aty_user user ");; y7 C) B) l. ?0 Z
sbSql.append("where ");
6 c, a% N) X9 H* B) I6 x7 ~ sbSql.append(" user.c_dept like ? ");. i! `0 N% T3 x- R" W" c( }# k
sbSql.append(" and ");
# e; v! g2 g$ X* V) L, E sbSql.append(" n_valid = 1 ");
; o7 `( \4 s# ~- U( h sbSql.append(" and ");
" m* C$ D/ n: X1 D- Q& G3 F sbSql.append(" user.c_dept != -1 ");- j3 v& ]" [" v; J; [1 b1 n: x# s' B
sbSql.append("limit ?,?");
8 z. @, r# u" A" c+ C& ~看过这四段代码大家,可能会有疑问,这是为什么呢?9 Z ^" e' j: C* |
我总结了几点:# f0 M+ a4 d; d" M
1、大家可能注意到了变量的命名方式,可能大家平时写代码的时候注意不到这个,不过这也是个人的习惯问题的。其实按照自己的命名规则来写没有问题,问题在于我们在工作中写的代码不会只有自己看的。后期维护的人员也会看的,这样可以让维护人员直观的了解变量的数据类型。 ]) N2 ?+ L# F3 s+ U
: A. C+ w9 D$ I; H+ d: b, [. f# O
2、为什么不用字符拼接而是用通配符?很多的答案我相信都是一致的,没错就是防注入。但是可能很多意识不到还有一个问题就是数据库解析。数据库接受到程序传入的SQL语句的时候,如果是拼接的字符串数据库会自动进行解析工作,那么大量SQL涌入的时候,效率就可想而知了。
# G& y, O- O9 i5 f+ W7 s, C& J4 n$ b5 N$ {7 P0 ~* @
3、为什么摒弃了最熟悉的String类型而是用StringBuilder类型。我们首先来看String类型定义的特殊性,如果用new的方式我就不用说了,大家用new的方式定义String类型的时候比较少,即使是那么定义了。大家一定会知道只要是new就一定会创建一个字符串。2 O' m; x8 M" B# x
6 i3 I8 H' h+ V; C
字符串拼接的过程,先搜索字符串池中字符串对象。如果存在就会把该字符串地址赋值给定义的字符串变量。如果不存在就会重新创建对象。在这种拼接的过程中创建很多对象,那么对性能要求比较高,而且效率很低下。
9 S. D' V* f( E; B还有人可能问了,为什么不是StringBuffer,因为这里不需要线程安全,只要效率。所以选择StringBuilder就可以了。5 d4 }& v& o3 R6 k! u
$ S* L9 `+ |6 a( c9 Y8 v
4、最后一个可能是大家不太注意的问题就是,SQL的格式。一段良好的代码它的可读性是最珍贵的。说一个人有多牛,不是说这个人可以写出别人看不懂的代码,而是看有多少人可以读懂他的代码。所以SQL的格式也非常重要。
& W( }% m3 T6 _/ O; i
: _7 T1 a$ u4 o7 Z) F0 _5 K! Z3 `, c9 K
看沙发吧!我不知道我写帖子里面带有什么词语了,就是不能通过。
& L |3 o) O: j, N" V# g2 P2 h0 i* i% z) W: ?# V
这次就说这么多,我希望大家多多参与进来,不过看昨天大家回复的帖子。很多人愿意被动的接受知识,而不愿意去主动探索去寻找知识。这样的态度是不对的,希望这个帖子可以让更多参与进来,不是我一个人写,而是所有人写。写出自己对编程的思考,自己的想法,自己的技巧。
7 z5 o7 Q7 ~7 u( N
! A0 r. x: K, G1 I/ o! w3 W
# m/ x m: J7 h6 h! n1 h4 n |
-
总评分: 帮币 + 2
查看全部评分
|