经常有这样的情况,从数据库中获取的数据格式并不是我们想在JSP页面上展示的,我推荐给大家以下三种mysql到JSP之间数据转换格式。
数据库sql直接转换
有一些数据,我们可以直接通过sql直接转换,不过一般处理格式比较单一的内容。
convert(case m.stauts when 1 then '启用' when 2 then '停收新单' when 3 then '停用账户' end,char) stauts
这种形式不善于处理格式比较复杂的类型,不过便捷一次到位。
利用JSTL
JSTL的格式处理也相当不错,这里推荐一篇文章JSTL标签 参考手册
<fmt:formatNumber value="${item.order_price}" pattern="#,##0.00#"/>
这种形式需要前后台数据遵循jstl的标签格式。
控制端进行转换
这种方式主要是利用controller对获取的数据进行转换,替换为前端需要的格式,然后供前端显示,这里我详细说一下。
先看看后台数据:
id uid username ip logintime logoutime
1 1 00010001 127.0.0.1 1434679452651 1435021823460
然后我们通过sql语句进行获取原始数据
<select id="getMemLoginfoList" resultType="hashmap" parameterType="map">
select m2.uid,
convert(m2.username,char) username,
m2.ip ip,
m2.logintime logintime,
m2.logoutime logoutime,
(m2.logoutime-m2.logintime) onlinetime
from loginfo
</select>
然后我们通过controller进行转换
List<HashMap> memloginfolist = this.memLoginfoMapper.getMemLoginfoList(vo, vo.createRowBounds());
for (HashMap map : memloginfolist) {
String logintime = DateUtil.formatTimeMillis(map.get("logintime").toString());
String logoutime = DateUtil.formatTimeMillis(map.get("logoutime").toString());
String onlinetime = DateUtil.formatTimeInterval(map.get("onlinetime").toString());
map.put("logintime", logintime);
map.put("logoutime", logoutime);
map.put("onlinetime", onlinetime);
}
public static String formatTimeInterval(String time) {
long timeInterval = Long.parseLong(time);
long day = 0;
long hour = 0;
long min = 0;
long sec = 0;
day = timeInterval / (24 * 60 * 60 * 1000);
hour = (timeInterval / (60 * 60 * 1000) - day * 24);
min = ((timeInterval / (60 * 1000)) - day * 24 * 60 - hour * 60);
sec = (timeInterval / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
StringBuilder result = new StringBuilder();
if (day > 0) {
result.append(day);
result.append("天");
}
if (hour > 0) {
result.append(hour);
result.append("时");
}
if (min > 0) {
result.append(min);
result.append("分");
}
if (sec > 0) {
result.append(sec);
result.append("秒");
}
return result.toString();
}
前端显示为
这种形式处理起来比较随意。