开发者学堂课程【DAO 开发实战业务分析:OR-Mapping 设计改进(统计查询改进)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/399/detail/5183
OR-Mapping 设计改进(统计查询改进)
内容介绍:
一、简要说明
二、具体内容
三、总结
一、简要说明
统计查询的操作较为固化。而且统计查询个数往往只返回一个结果。因为转换的操作形式使用不多,所以建议直接将其在 AbstractDAO 里面进行部分实现。
二、具体内容
1、在 AbstractDAO 里面追加有一个 getSupport()方法:
public
<
T> getS
upport
(String sql,Class
<
T> cls,Object …args) {
this.pstmt = this.conn.preparedStatement(sql) ;
if (args.length > 0) {
}
2、在 ResultSetToVO 类里面追加有一个转换的控制方法。
转换的一定是单个值,所以找到public
static
<
T>
converteStat(PreparedStatement pstmt,Class<T> cls) {,
首先进行判断为if (”
I
nteger”.equals(type) || ”
int”.equals(type)){
,结果转为整型,则再跟上Result
rs
=
pstmt
.
execute
Q
uery(
)
;,进行return
new
I
nteger(rs.
getInt(1));
。此时位型不好操作,而 Resultset 可以直接用 String 接收,则先写入 String val = null;,
跟上 if(rs.next()) {,
再跟上 val = rs.getString(1) ;,
但如果根据T来操作结果是不承认的,所以将<T> 改为 Object,将 Class<T> cls 删除掉,也不用判断位型,直接返回 return rs.getString(1);,否则 return“0”,
如下:
public
static
O
bject
converteStat(PreparedStatement pstmt)
throws
E
xception
{
Result
rs
=
pstmt
.
execute
Q
uery(
);
if(rs.
next
()){
return
rs.
getString(1);
}
return“0”
}
3、在 AbstractDAO 里要进行转换处理
直接 return
R
esult
S
et
T
oVO
U
til
.converteStat(this.pstmt)
;
,将 Object 强制变为 T ,直接跟上
return
super.
getSupport(sql,Long.class,args) ;
,如果返回的是 String,则跟上
Object
val
= R
esult
S
et
T
oVO
U
til
.converteStat(this.pstmt)
;,且v
al =
Long.
parseLong(val.toString());,
则return val。
再跟上}
else
if
(“int”.
equals(cls.getSimpleName()) ||
“Integer”.”int”.equals(cls.getSimpleName());,
再跟上val
=Integer. parseInt(val.toString());
,最终结果只需要将val强制变为T,即return (T) val;就可以完成操作了。此时的结果也可以正常通过,
如下:
public
<
T> getS
upport
(String sql,Class
<
T> cls,Object …args) {
this.pstmt = this.conn.preparedStatement(sql) ;
if (args.length > 0) {
}
Object
val
= R
esult
S
et
T
oVO
U
til
.converteStat(this.pstmt)
;
if
(
”L
ong“.
equalsIgnoreCase(cls.getSimpleName()
)) ;
v
al =
Long.
parseLong(val.toString()) ;
}
else
if
(“int”.
equals(cls.getSimpleName()) || “Integer”.”int”.equals(cls.getSimpleName()) ;
val
=Integer. parseInt(val.toString())
;
}
return
(T)val
}
可以适用于所有的单表数据操作。
三、总结
程序调用处理和之间查询全部数据类似。所有的功能只是最基本的实现,如果要想将其应用在生产环境,还需要编写更多的代码,对整个的结构进行更加详细的改变。