TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
废话少说先上代码:
/ p, a/ E3 v, r& h" E复制内容到剪贴板
1 P# c* H1 h3 e# ^3 ?, p代码:2 f: D+ _' ~8 Z5 Q2 G
int iPage = 0;
6 j( ]2 v: A# k! E# ?8 c+ m int iPerPage = 20;' _" B7 Z( o& \5 y! f4 o% e
String sName = "admin";+ V- L4 P Y" x% ~- k# N
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 "4 d( O6 }# w. M, W! D
+ sName + " and n_valid = 1 and user.c_dept != -1 limit " + iPage + "," + iPerPage;
" q2 ?0 c+ X! N% t6 M大家写的代码是不是这个样子的呢?2 ?. w2 v2 I4 w% n9 H7 a4 X5 l
我相信很多人会说,我的代码比这个写的好多了。
' I3 B5 Q% r3 O9 {' H7 x% N好的看下面的代码:
' Z) B+ r/ v, R复制内容到剪贴板
. _/ H* B V2 A$ ^( W* { V代码:! d/ ]1 k7 U& k0 K1 t' q. \- W* ~
int iPage = 0;' o! t2 m+ J; \$ J, Q) Z
int iPerPage = 20;( t$ W$ B l* b/ ^
String sName = "admin";
3 A6 T8 }# n7 @- c String sSql = "select "
, B( l( w: Q3 k* n# l2 w5 B9 Q + " user.c_name name, " ! B1 J0 U2 i v2 S* @ \6 H+ L
+ " (select dept.c_name "( P6 F5 I+ y* x8 t; z
+ " from db_aty_t_aty_dept dept "
" A6 P5 L1 L, L3 G$ C + " where "
( p% R: o L- [* y + " dept.c_id=user.c_dept) dept,"
7 P% N1 x. R3 @ + " user.c_gzdh gzdh "
: m' a8 D, K. v1 D- z0 g + "from " , t5 m# x3 x t% {$ ]' P$ s
+ " dt_aty.t_aty_user user "
+ f( ^/ a8 ^ v* l + "where " 1 D) [8 C9 j7 m8 p: T; x
+ " user.c_dept like " + sName
Z1 J' t+ l; c) {9 M% G + " and "
& s9 e8 Z- {; x% y& v4 ?3 T + " n_valid = 1 "
- J( R: o2 c+ C" c + " and " 2 B, D5 f/ V/ J' I
+ " user.c_dept != -1 " 0 s7 C& [. t* V8 o% ^/ i
+ "limit " + iPage + "," + iPerPage;) V; Q1 ^$ d! y( Z, p5 V
那么这个代码大家满意么?
: U4 J) A" ?1 ]还是有人会说,还可以改进,那么好的。$ k0 L5 `8 y! t8 c) z/ @
继续看代码:
6 {; ~2 ~1 M; ?7 r3 x1 n' [: L复制内容到剪贴板" @) \; h' D7 y2 X) [9 n
代码:! l8 ?! m9 n9 o; v
int iPage = 0;
) N, V$ W. G6 h9 R% ]8 ~ int iPerPage = 20;
$ k2 B7 k$ g- g5 k9 S( v) v String sName = "admin";% n# g( R9 \/ W) o: j% ~4 {' n
String sSql = "select "
# X) o* c9 Q% l8 w + " user.c_name name, "
/ [7 m; p0 Q r, z; o + " (select dept.c_name "% K5 ~9 ~- a* l4 Q1 s, F2 S
+ " from db_aty_t_aty_dept dept "! Z( e9 t8 j2 n' Q) H& \
+ " where "
% U- C* G G/ r. b. @ + " dept.c_id=user.c_dept) dept,"
i: w, \" H- a4 }9 J4 A6 x + " user.c_gzdh gzdh "9 l0 W/ ~7 e$ ]3 r _
+ "from "
/ o' B6 ~7 r( l, |9 R Z6 _ + " dt_aty.t_aty_user user "
- C I. W% d; `7 ~6 z3 V) W6 s + "where " 1 j: b- _2 W$ d# ` x) c8 j
+ " user.c_dept like ?" 7 p3 k; ?+ M8 R$ ~8 `) H
+ " and "
' a, J2 U' O! P* \ + " n_valid = 1 "
) k, d* |0 b3 r9 r9 S; Y0 n' | + " and " 8 i% h3 Q0 D' u$ H& C
+ " user.c_dept != -1 "
/ Q& ^. I+ z; K* P1 S/ Z + "limit ?,?";
/ c3 z7 O; D/ z8 b$ G! O这个可以了吧!还是有人会说,我还可以改进,那么恭喜你。
O) B" p7 p2 g( P看最后一段代码:
5 ?6 B. x: N; r3 e! b: B) E# C复制内容到剪贴板9 g0 w a1 j* Z/ G
代码:) @% B9 `- x# ]8 m0 F R
int iPage = 0;* {' f' b0 e3 _* q) _7 |
int iPerPage = 20;( @0 V) Y% R5 X
String sName = "admin";
; o& [. T3 i7 Y* \ StringBuilder sbSql = new StringBuilder();
' N: F+ |: B' V! `; J+ Q2 ? sbSql.append("select ");4 K) `* ?! F2 s
sbSql.append(" user.C_name name, ");
0 O5 a" n. B- a) j- p sbSql.append(" (select ");: P, A+ i. i6 j9 W
sbSql.append(" dept.c_name ");7 l) p- G# j) t" g4 k. G; w# v* c2 ^/ ]
sbSql.append(" from ");& ~/ N5 y x2 f; l+ l% W/ J6 E
sbSql.append(" db_aty.t_aty_dept dept ");! Q) g+ N) g* X6 T% Y4 ^9 s2 \8 d
sbSql.append(" where ");
( @" @5 t0 ]# X9 r9 | sbSql.append(" dept.c_id=user.c_dept) dept, ");
; Y( \+ z& ]5 P) K sbSql.append(" user.c_gzdh gzdh ");
0 b% ]7 H6 @( J; w% i8 a sbSql.append("from ");
' b$ `( P; _1 K! z sbSql.append(" db_aty.t_aty_user user ");6 m* D+ C6 K9 [) O- `
sbSql.append("where ");0 ^; z/ q& J4 U7 e) ]
sbSql.append(" user.c_dept like ? ");/ \7 A% V8 r1 C( s/ K5 W+ _6 a
sbSql.append(" and ");4 l5 @" o, s( k
sbSql.append(" n_valid = 1 ");
1 X: C9 l: [9 E( V$ Y sbSql.append(" and ");
- l1 ?! O3 H" e! H sbSql.append(" user.c_dept != -1 ");# b# R0 z1 ]& |. E% Z+ U
sbSql.append("limit ?,?");
- N* Y6 W4 p% C/ u8 V+ k8 v看过这四段代码大家,可能会有疑问,这是为什么呢?" J) G/ g" s. @* M( ` g6 O& t
我总结了几点:
' p s& p1 X; F2 I* g1、大家可能注意到了变量的命名方式,可能大家平时写代码的时候注意不到这个,不过这也是个人的习惯问题的。其实按照自己的命名规则来写没有问题,问题在于我们在工作中写的代码不会只有自己看的。后期维护的人员也会看的,这样可以让维护人员直观的了解变量的数据类型。
$ K: W- h: F. y: x P2 A) s6 M8 u$ l5 {
2、为什么不用字符拼接而是用通配符?很多的答案我相信都是一致的,没错就是防注入。但是可能很多意识不到还有一个问题就是数据库解析。数据库接受到程序传入的SQL语句的时候,如果是拼接的字符串数据库会自动进行解析工作,那么大量SQL涌入的时候,效率就可想而知了。5 K- P1 `3 }: y$ r
" W9 F- `1 M+ }' x9 y4 }! W
3、为什么摒弃了最熟悉的String类型而是用StringBuilder类型。我们首先来看String类型定义的特殊性,如果用new的方式我就不用说了,大家用new的方式定义String类型的时候比较少,即使是那么定义了。大家一定会知道只要是new就一定会创建一个字符串。
/ M x" q. i) x" [+ p) _0 s2 [- A) p( W
字符串拼接的过程,先搜索字符串池中字符串对象。如果存在就会把该字符串地址赋值给定义的字符串变量。如果不存在就会重新创建对象。在这种拼接的过程中创建很多对象,那么对性能要求比较高,而且效率很低下。
1 ~$ k5 |. b( X6 c# t q还有人可能问了,为什么不是StringBuffer,因为这里不需要线程安全,只要效率。所以选择StringBuilder就可以了。6 H. d& F/ t# {
7 M/ P! r7 ^- P/ j4 j, `9 i" i" a4、最后一个可能是大家不太注意的问题就是,SQL的格式。一段良好的代码它的可读性是最珍贵的。说一个人有多牛,不是说这个人可以写出别人看不懂的代码,而是看有多少人可以读懂他的代码。所以SQL的格式也非常重要。$ t4 S; Z" v. n( a, S& C5 \- T
5 \4 O1 x3 `% M# E8 |7 z; T( L' A9 {* `0 u
看沙发吧!我不知道我写帖子里面带有什么词语了,就是不能通过。/ {9 U' T! l- ^8 c9 l/ z" V4 _+ v
$ |( ]8 K1 {7 i这次就说这么多,我希望大家多多参与进来,不过看昨天大家回复的帖子。很多人愿意被动的接受知识,而不愿意去主动探索去寻找知识。这样的态度是不对的,希望这个帖子可以让更多参与进来,不是我一个人写,而是所有人写。写出自己对编程的思考,自己的想法,自己的技巧。: k9 s( E3 C) ]1 V0 `
; B' u7 v( o" W; |
" i7 n: S! g# G9 m# H |
-
总评分: 帮币 + 2
查看全部评分
|