1. 程式人生 > >mongodb基礎系列——資料庫查詢資料返回前臺JSP(一)

mongodb基礎系列——資料庫查詢資料返回前臺JSP(一)

經過一段時間停頓,終於提筆來重新整理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對。

{ "_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : { "city" : "beijing" , "code" : "065000"}}
那看看輸出List結果如下:
      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,點我下載~~