Java组件javabean用户登录实例详解

本文简单讲述使用javabean实现用户登录,包括用户登录,注册和退出等。

1.关于javabean
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性。

2.系统架构
2.1登录用例图

2.2页面流程图

2.3系统架构图

2.4数据库设计
本例使用oracle数据库

用户表包括id,用户名,密码,email,共4个字段

-- Create table
create table P_USER
(
 id  VARCHAR2(50) not null,
 username VARCHAR2(20),
 password VARCHAR2(20),
 email VARCHAR2(50)
)
tablespace USERS
 pctfree 10
 initrans 1
 maxtrans 255
 storage
 (
 initial 64
 minextents 1
 maxextents unlimited
 );
-- Add comments to the table
comment on table P_USER
 is '用户表';
-- Add comments to the columns
comment on column P_USER.id
 is 'id';
comment on column P_USER.username
 is '用户名';
comment on column P_USER.password
 is '密码';
comment on column P_USER.email
 is 'email';

3.javabean编写
3.1开发数据库底层处理javabean
DBAcess.java

package com.baosight.bean; 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; 

/**数据库操作类
 * <p>Title:DBAcess </p>
 * <p>Description:TODO </p>
 * <p>Company: </p>
 * @author yuan
 * @date 2016-5-22 下午12:40:24*/
public class DBAcess {
 private String driver = "oracle.jdbc.driver.OracleDriver";
 private String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:orcl";
 private String username = "scott";
 private String password = "tiger";
 private Connection conn;
 private Statement stm;
 private ResultSet rs;
 //创建连接
 public boolean createConn() {
  boolean b = false;
  try {
   Class.forName(driver);// 加载Oracle驱动程序
   conn = DriverManager.getConnection(url, username, password);
   b = true;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }// 获取连接
  catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return b;
 }
 //修改
 public boolean update(String sql){
  boolean b = false;
  try {
   stm = conn.createStatement();
   stm.execute(sql);
   b = true;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return b;
 }
 //查询
 public void query(String sql){
  try {
   stm = conn.createStatement();
   rs = stm.executeQuery(sql);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 //判断有无数据
 public boolean next(){
  boolean b = false;
  try {
   if(rs.next()){
    b = true;
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return b;
 }
 //获取表字段值
 public String getValue(String field) {
  String value = null;
  try {
   if (rs != null) {
    value = rs.getString(field);
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return value;
 }
 //关闭连接
 public void closeConn() {
  try {
   if (conn != null) {
    conn.close();
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 //关闭statement
 public void closeStm() {
  try {
   if (stm != null) {
    stm.close();
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 //关闭ResultSet
 public void closeRs() {
  try {
   if (rs != null) {
    rs.close();
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public String getDriver() {
  return driver;
 }
 public void setDriver(String driver) {
  this.driver = driver;
 }
 public String getUrl() {
  return url;
 }
 public void setUrl(String url) {
  this.url = url;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public Statement getStm() {
  return stm;
 }
 public void setStm(Statement stm) {
  this.stm = stm;
 }
 public ResultSet getRs() {
  return rs;
 }
 public void setRs(ResultSet rs) {
  this.rs = rs;
 }
 public void setConn(Connection conn) {
  this.conn = conn;
 }
 public Connection getConn() {
  return conn;
 }
}

上述数据库操作类使用JDBC连接数据库,并封装了连接数据库、查询、修改、关闭资源等方法。

3.2开发JavaBean业务逻辑组件
UserBean.java

package com.baosight.bean; 

import com.baosight.util.GenerateUUID; 

/**
 * <p>Title:UserBean </p>
 * <p>Description:TODO </p>
 * <p>Company: </p>
 * @author yuan
 * @date 2016-5-22 下午1:05:00*/
public class UserBean {
 //登录验证
 public boolean valid(String username,String password){
  boolean isValid = false;
  DBAcess db = new DBAcess();
  if(db.createConn()){
   String sql = "select * from p_user where username='"+username+"' and password='"+password+"'";
   db.query(sql);
   if(db.next()){
    isValid = true;
   }
   db.closeRs();
   db.closeStm();
   db.closeConn();
  }
  return isValid;
 }
 //注册验证
 public boolean isExist(String username){
  boolean isValid = false;
  DBAcess db = new DBAcess();
  if(db.createConn()){
   String sql = "select * from p_user where username='"+username+"'";
   db.query(sql);
   if(db.next()){
    isValid = true;
   }
   db.closeRs();
   db.closeStm();
   db.closeConn();
  }
  return isValid;
 }
 //注册用户
 public boolean add(String username,String password,String email){
  boolean isValid = false;
  DBAcess db = new DBAcess();
  if(db.createConn()){
   String sql = "insert into p_user(id,username,password,email) values('"+GenerateUUID.next()+"','"+username+"','"+password+"','"+email+"')";
   isValid = db.update(sql);
   db.closeStm();
   db.closeConn();
  }
  return isValid;
 }
}

上述业务逻辑javabean,定义了登录验证、注册验证和新增用户等方法

3.3关于生成唯一ID
上面在新增用户时需要插入ID,本例使用UUID来生成唯一ID

GenerateUUID.java

package com.baosight.util; 

import java.util.Date; 

/**
 * <p>Title:GenerateUUID </p>
 * <p>Description:TODO </p>
 * <p>Company: </p>
 * @author yuan
 * @date 2016-5-22 下午1:31:46*/
public class GenerateUUID {
  private static Date date = new Date();
// private static StringBuilder buf = new StringBuilder();
  private static int seq = 0;
  private static final int ROTATION = 99999;
  public static synchronized long next(){
  if (seq > ROTATION) seq = 0;
//  buf.delete(0, buf.length());
  date.setTime(System.currentTimeMillis());
  String str = String.format("%1$tY%1$tm%1$td%1$tk%1$tM%1$tS%2$05d", date, seq++);
  return Long.parseLong(str);
 }
  public static void main(String[] args) {
   for(int i=0;i<100;i++){
    System.out.println(next());
   }
 }
}

4.页面编写
4.1登录页面
login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>"> 

 <title>登录页面</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 </head> 

 <body>
 <form action="login_action.jsp" method="post">
  <table>
   <tr>
    <td colspan="2">登录窗口</td>
   </tr>
   <tr>
    <td>用户名:</td>
    <td><input type="text" name="username" />
    </td>
   </tr>
   <tr>
    <td>密码:</td>
    <td><input type="text" name="password" />
    </td>
   </tr>
   <tr>
    <td colspan="2"><input type="submit" value="登录" /> <a href="register.jsp">注册</a>
    </td>
   </tr>
  </table>
 </form>
</body>
</html>

页面效果

4.2登录业务逻辑处理页面
login_action.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="com.baosight.bean.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

 <%
 String username = request.getParameter("username");
 String password = request.getParameter("password");
 if(username==null||"".equals(username.trim())||password==null||"".equals(password.trim())){
  //out.write("用户名或密码不能为空!");
  System.out.println("用户名或密码不能为空!");
  response.sendRedirect("login.jsp");
  return;
  //request.getRequestDispatcher("login.jsp").forward(request, response);
 }
 UserBean userBean = new UserBean();
 boolean isValid = userBean.valid(username,password);
 if(isValid){
  System.out.println("登录成功!");
  session.setAttribute("username", username);
  response.sendRedirect("welcome.jsp");
  return;
 }else{
  System.out.println("用户名或密码错误,登录失败!");
  response.sendRedirect("login.jsp");
  return;
 }
 %>

上面的JSP调用了Javabean进行业务处理
当用户名或密码为空时返回登录页面login.jsp

当登录成功后将用户信息保存到session,跳转到欢迎页面welcome.jsp

当登录失败时返回登录页面login.jsp

4.3登录成功欢迎页面
welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>"> 

 <title>My JSP 'welcom.jsp' starting page</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 </head> 

 <body>
 <table>
  <tr>
   <td><img src="images/logo4.png" />
   </td>
   <td><img src="images/logo2.png" height="90" />
   </td>
  </tr>
  <tr>
   <td colspan="2"><hr />
   </td>
  </tr>
  <tr>
   <td>
    <table>
     <tr>
      <td><a>Main</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu1</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu2</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu3</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu4</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu5</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu6</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu7</a>
      </td>
     </tr>
     <tr>
      <td><a>Menu8</a>
      </td>
     </tr>
    </table></td>
   <td>
    <form action="loginout.jsp" method="post">
     <table>
      <tr>
       <td colspan="2">登录成功!</td>
      </tr>
      <tr>
       <td>欢迎你,</td>
       <td>${username }</td>
      </tr>
      <tr>
       <td colspan="2"><input type="submit" value="退出" /></td>
      </tr>
     </table>
    </form></td>
  </tr>
 </table>
</body>
</html>

页面效果

4.4退出登录业务处理页面
loginout.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>"> 

 <title>My JSP 'loginout.jsp' starting page</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 --> 

 </head> 

 <body>
 <%
 session.removeAttribute("username");
 response.sendRedirect("login.jsp");
 %>
 </body>
</html>

从session中移除用户信息,跳转到登录页面login.jsp

4.5用户注册页面
register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>"> 

 <title>注册页面</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 </head> 

 <body>
 <form action="register_action.jsp" method="post">
  <table>
   <tr>
    <td colspan="2">注册窗口</td>
   </tr>
   <tr>
    <td>用户名:</td>
    <td><input type="text" name="username" /></td>
   </tr>
   <tr>
    <td>密码:</td>
    <td><input type="text" name="password1" /></td>
   </tr>
   <tr>
    <td>确认密码:</td>
    <td><input type="text" name="password2" /></td>
   </tr>
   <tr>
    <td>email:</td>
    <td><input type="text" name="email" /></td>
   </tr>
   <tr>
    <td colspan="2"><input type="submit" value="注册" /> <a href="login.jsp">返回</a></td>
   </tr>
  </table>
 </form>
</body>
</html>

运行效果

4.6注册业务处理页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="com.baosight.bean.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

 <%
 String username = request.getParameter("username");
 String password1 = request.getParameter("password1");
 String password2 = request.getParameter("password2");
 String email = request.getParameter("email");
 if(username==null||"".equals(username.trim())||password1==null||"".equals(password1.trim())||password2==null||"".equals(password2.trim())||!password1.equals(password2)){
  //out.write("用户名或密码不能为空!");
  System.out.println("用户名或密码不能为空!");
  response.sendRedirect("register.jsp");
  return;
  //request.getRequestDispatcher("login.jsp").forward(request, response);
 }
 UserBean userBean = new UserBean();
 boolean isExit = userBean.isExist(username);
 if(!isExit){
  userBean.add(username, password1, email);
  System.out.println("注册成功,请登录!");
  response.sendRedirect("login.jsp");
  return;
 }else{
  System.out.println("用户名已存在!");
  response.sendRedirect("register.jsp");
  return;
 }
 %>

上面的JSP调用了Javabean进行业务处理

当用户名或密码为空时返回注册页面register.jsp

当注册用户名在数据库不存在时,新增用户

新增成功后跳转到登录页面login.jsp

当注册用户名在数据库存在时,返回注册页面register.jsp

5.总结

本例使用javabean对数据库操作和业务逻辑处理进行了封装。

以上即为使用javabean实现用户登录的简单介绍,还需要不断完善,希望大家一起学习进步!

(0)

相关推荐

  • jsp servlet javaBean后台分页实例代码解析

    首先后台分页需要理清分页思路,把数据库里面需要分页的信息放到List集合中,然后按照页面反馈给后台的页码对List集合进行SubList切割把切完的List传到前端进行显示. 1.分页的demo文件结构图 导入的包 2.代码 SplitPageServlet代码 package ActionServlet; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import ja

  • Javabean和map相互转化方法代码示例

    在做导入的时候,遇到了需要将map对象转化 成javabean的问题,也就是说,不清楚javabean的内部字段排列,只知道map的 key代表javabean的字段名,value代表值. 那现在就需要用转化工具了.是通用的哦! 首先来看 JavaBean 转化成Map的方法: [java] /** * 将一个 JavaBean 对象转化为一个 Map * @param bean 要转化的JavaBean 对象 * @return 转化出来的 Map 对象 * @throws Introspec

  • java中javaBean与Bean的深入理解

    java中javaBean与Bean的深入理解 JavaBean 是Java中的一种特殊的类,可以将多个对象封装到一个对象(bean)中. 特点是可序列化,提供无参构造器,提供getter方法和setter方法的访问对象属性. 名字中的Bean是用于Java的可重用软件组件的惯用叫法. 优点: Bean可以控制它的属性.事件和方法是否暴露给其他程序. Bean可以接受来自其他对象的事件,也可以产生事件给其他对象. Bean的属性可以被序列化,以供日后重用. JavaBean规范: 有一个publ

  • java 基础之JavaBean属性命名规范问题

    java 基础之JavaBean属性命名规范问题 JavaBean属性名要求:前两个字母要么都大写,要么都小写 下面我们来找找如果不遵循这个规范是个什么样子?? 因为本人还没有用反射来通过不规范的属性名来查找相应的属性值,所以以下的结论都是我的猜测.如果有错误欢迎大家来指正!!! package com.domain; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDes

  • javabean servlet jsp实现分页功能代码解析

    前端实现用ligerUI实现分页,感觉用框架确实简单,闲着无聊,模拟着liger的分页界面实现了一遍(只要是功能,样式什么无视) 这里用基础的三层架构+servlet+jsp实现,思路很简单,把所有分页相关信息写入到一个pagebean类里面,service返回这个bean类,每次分页查询时都从该bean里查找信息.只是其中的细节问题比较繁琐,如边界处理(前端和后台边界都要处理),下拉框跳转后要显示当前页等等 这是ligerUI实现的分页样式(实现过程我的上一篇博客有写:http://www.j

  • JavaBean四个作用域范围的详解

    JavaBean四个作用域范围的详解 一 说明 使用useBeans的scope属性可以用来指定javabean的作用范围. 二 四个作用范围 三 代码 1.login.jsp <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %> <% String path = request.getContextPath

  • Java组件javabean用户登录实例详解

    本文简单讲述使用javabean实现用户登录,包括用户登录,注册和退出等. 1.关于javabean JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取.众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性. 2.系统架构 2.1登录用例图 2.2页面流程图 2.3系统架构图

  • java中Spring Security的实例详解

    java中Spring Security的实例详解 spring security是一个多方面的安全认证框架,提供了基于JavaEE规范的完整的安全认证解决方案.并且可以很好与目前主流的认证框架(如CAS,中央授权系统)集成.使用spring security的初衷是解决不同用户登录不同应用程序的权限问题,说到权限包括两部分:认证和授权.认证是告诉系统你是谁,授权是指知道你是谁后是否有权限访问系统(授权后一般会在服务端创建一个token,之后用这个token进行后续行为的交互). spring

  • 微信小程序后台解密用户数据实例详解

     微信小程序后台解密用户数据实例详解 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html openId : 用户在当前小程序的唯一标识 因为最近根据API调用https://api.weixin.qq.com/sns/jscode2session所以需要配置以下服务,但是官方是不赞成这种做法的, 而且最近把在服务器配置的方法给关闭了.也就是说要获取用户openid,地区等信息只能在后台获取. 一下是官方的

  • Java 文件上传的实例详解

    Java 文件上传的实例详解 java 文件上传 Java文件上传,介绍几种常用的方法,也是经过本人亲手调试过的 1.jspsmartupload 这个组件用起来是挺方便的,不过就是只适合小文件上传,如果大文件上传的话就不行,查看了一下他的代码,m_totalBytes = m_request.getContentLength(); m_binArray = new byte[m_totalBytes];居然把整个上传文件都读到内存去了,那如果是上传几十M的文件,同时几个用户上传,服务器稳挂,不

  • java爬虫模拟登陆的实例详解

    使用jsoup工具可以解析某个URL地址.HTML文本内容,是java爬虫很好的优势,也是我们在网络爬虫不可缺少的工具.本文小编带领大家使用jsoup 实现java爬虫模拟登陆,通过省力的API,很好的实现java爬虫模拟登陆. 一.使用工具:Jsoup jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. 二.实现java爬虫模拟登陆 1.确定想要爬取的ur

  • java 中createStatement()方法的实例详解

    java 中createStatement()方法的实例详解 用缺省设置创建时,ResultSet 是一种只能访问一次(one-time-through).只能向前访问(forward-only)和只读的对象.您只能访问数据一次,如果再次需要该 数据,必须重新查询数据库. 然而,并不只有这一种方式.通过设置 Statement 对象上的参数,您可以控制它产生的 ResultSet.例如: ... Class.forName(driverName); db = DriverManager.getC

  • jQuery EasyUI 组件加上“清除”功能实例详解

    1.背景 在使用 EasyUI 各表单组件时,尤其是使用 ComboBox(下拉列表框).DateBox(日期输入框).DateTimeBox(日期时间输入框)这三个组件时,经常有这样的需求,下拉框或日期只允许选择.不允许手动输入,这时只要在组件选项中加入 editable:false 就可以实现,但有一个问题,就是:一旦选择了,没办法清空.经过研究,可以用一个变通的解决方案:给组件加上一个"清除"按钮,当有值是,显示按钮,点击按钮可清空值,当无值是,隐藏按钮. 2.函数定义 定义JS

  • Java 获取服务器环境的实例详解

    Java 获取服务器环境的实例详解 废话不多说,直接上代码,代码中的注释写的比较清楚,请大家好好看, package com.rapido.utils; import java.util.Properties; /** * 获取服务器环境信息 * @author X-rapido * */ public class SystemDataUtil { public static Properties getSystemProperties() { Properties props = System

  • java 中复合机制的实例详解

    java 中复合机制的实例详解 继承的缺陷 继承的缺陷是由它过于强大的功能所导致的.继承使得子类依赖于超类的实现,从这一点来说,就不符合封装的原则. 一旦超类随着版本的发布而有所变化,子类就有可能遭到破坏,即使它的代码完全没有改变. 为了说明的更加具体,假设我们现在程序中使用到了HashSet,我们需要增加一个功能,去统计这个HashSet自创建以来一共曾经添加过多少元素. 在还不知道继承的缺陷的情况下,我们设计了一个类,继承了HashSet,添加了一个属性addCount来进行统计,并且复写了

  • java操作mongoDB查询的实例详解

    java操作mongo查询的实例详解 前言: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且

随机推荐