mongodb基礎系列——資料庫查詢資料返回前臺JSP(一)
阿新 • • 發佈:2019-02-02
經過一段時間停頓,終於提筆來重新整理mongodb基礎系列部落格了。
同時也很抱歉,由於各種原因,沒有及時整理出,今天做了一個demo,來演示,mongodb資料庫查詢的資料在JSP顯示問題。
做了一個簡單的測試,不過基本上能滿足前臺展示的問題,若有問題,可以及時聯絡我,及時溝通。
//查詢所有 //其中類似access資料庫中游標概念 DBCursor cursor=collection.find(); System.out.println("mongodb中的user表結果如下:"); while(cursor.hasNext()){ System.out.println(cursor.next()); }
同時網上很多篇部落格,也都是如此檢視。那若介面需要後臺資料咋辦?到底怎麼傳遞過去啊?
想想咱們程式是如何傳遞過去的,查詢操作,無非是傳遞List、Map、具體實體物件。
OK,既然想到如此,那在你對mongdb一無所知時,其API是最好的入口處。通過API,發現DBCursor類有個方法toArray,其返回值為List,OK,發現這個方法後,其問題已經解決了50%啦。
繼續……
上述程式碼中資料結果,可以發現其實是JSON對。
那看看輸出List結果如下:{ "_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : { "city" : "beijing" , "code" : "065000"}}
List<DBObject> list=cursor.toArray();
System.out.println(list.toString());
return list;
其實List其上的陣列而已。[{ "_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : { "city" : "beijing" , "code" : "065000"}}]
那我們測試這個list,JSP就顯示輸出name、複核地址中的city、code
提示:測試Demo使用Jquery的Ajax做測試。
步驟:
第一:後臺Dao的查詢方法。與上篇部落格基本一樣,只是方法返回值不同而已。
public static List selectAll() throws Exception{
//第一:例項化mongo物件,連線mongodb伺服器 包含所有的資料庫
//預設構造方法,預設是連線本機,埠號,預設是27017
//相當於Mongo mongo =new Mongo("localhost",27017)
Mongo mongo =new Mongo();
//第二:連線具體的資料庫
//其中引數是具體資料庫的名稱,若伺服器中不存在,會自動建立
DB db=mongo.getDB("myMongo");
//第三:操作具體的表
//在mongodb中沒有表的概念,而是指集合
//其中引數是資料庫中表,若不存在,會自動建立
DBCollection collection=db.getCollection("user");
//查詢操作
//查詢所有
//其中類似access資料庫中游標概念
DBCursor cursor=collection.find();
System.out.println("mongodb中的user表結果如下:");
/* while(cursor.hasNext()){
System.out.println(cursor.next());
}*/
List<DBObject> list=cursor.toArray();
System.out.println(list.size());
System.out.println("dao.."+list.toString());
return list;
}
第二:搭建JSP與後臺的橋樑,在此使用Servlet,沒有配置Struts【有點嫌麻煩】,寫簡單的Servlet,配置Servlet【在web.xml中配置,不在此給出了,後面有具體demo】
其中doGet方法中,因為前臺使用Ajax,所以應該寫到response中,使用response的getWriter,當然也可以使用Struts2Util【若使用struts2】。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
List list=new EntityTest().selectAll();
response.setCharacterEncoding("UTF-8");//解決顯示中文亂碼問題
response.getWriter().write(list.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
第三:前端JSP使用Ajax呼叫,來獲取name、city、code值。
<body>
<input type="button" value="test" onclick="testajax()" />
</body>
function testajax() {
var _url = "http://localhost:8080/testmongodb/mongodb/";
jQuery.ajax({
url : _url,
type : "get",
dataType : "json",
success : function(d) {
alert(JSON.stringify(d));
alert(d[0].name);
alert(d[0].address.code);
}
});
}
Ajax中的成功返回的d,是個object物件,準確的說是JSON物件,為了方便客戶看,轉換成字串.JSON.stringfy(object)
為啥是用d[0]呢?
因為返回的d是個陣列,[]包圍的。列印的d是[],所以以陣列方式顯示。
若返回的不是陣列形式,比如不用[],結果如下:
response.getWriter().write(list.get(0).toString());
{ "_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : { "city" : "beijing" , "code" : "065000"}}
這樣的話:前臺Ajax展示如下:直接使用d.name、d.id、d.address.city
success : function(d) {
alert(JSON.stringify(d));
alert(d.name);
alert(d.address.code);
}
通過這種方式基本可以獲取其中的某值,若付給某個欄位,可以通過jquery賦值。
比如$("#id值").val(d.name); //類似這種形式賦值。
下篇部落格,給出常規table如何顯示list以及ligerui中顯示查詢的資料的demo。
至於部落格中專案demo,點我下載~~