http://blogread.cn/it/article/4348?f=wb (MongoDB)
安装:
1)下载MongoDB数据库(这里使用Windows 32 bit版)
http://downloads.mongodb.org/win32/mongodb-win32-i386-1.2.4.zip
然后解压到一个目录(这里是D:\MongoDB),
并且在D:\MongoDB目录中建个"data\db"目录用来存放数据文件。
(注意:很多文档中说"C:\data\db"目录是缺省目录,实际上是不起作用的)
2)下载MongoDB数据库的Java驱动程序
http://github.com/downloads/mongodb/mongo-java-driver/mongo-1.3.jar
然后把mongo-1.3.jar放到D:\MongoDB目录
完成上面两步就算完成安装任务了,够简单吧。
启动MongoDB数据库服务器:
D:\>cd D:\MongoDB
D:\MongoDB>bin\mongod --dbpath data\db
能看到下面这张图就算是成功了:
下面是一个CRUD例子,虽然简单,不过也算是覆盖了大多数核心内容了,
一边看代码一边看注释吧,挺简单的。
import java.util.*; import com.mongodb.*; //com.mongodb包类似于java.sql,大多数与数据库相关的类都在这里 public class MongoTest { public static void out(Object o) { System.err.println(o); } public static void out() { System.err.println(); } public static void main(String[] args) throws Exception { //Mongo是与java.sql.Connection同等级别的概念, //默认是链接到127.0.0.1:27017/test, //见getConnectPoint()的输出结果,其中27017是端口号,test是数据库名 Mongo mongo = new Mongo(); out("mongo.getConnectPoint() = "+mongo.getConnectPoint()); //查看所有的数据库名 for(String dbName : mongo.getDatabaseNames()) { out("dbName = "+dbName); } //DB类用来表示一个数据库,如果数据库不存在则创建一个 DB db = mongo.getDB( "test" ); //查看所有的Collection名 for(String collectionName : db.getCollectionNames()) { out("collectionName = "+collectionName); } out(); //DBCollection类用来存放对象,类似数据库表的概念 DBCollection coll = db.getCollection("testCollection"); //插入10个User对象到coll //插入DBCollection中的对象必需实现DBObject接口(见User类的注释) for(int i=1; i<=10; i++) { User user = new User(); user.setName("user "+(10+i)); user.setAge(10+i); user.setDate(new Date()); coll.insert(user); } findAll(coll); //查找出coll中的所有对象并打印输出 //查找出第一条记录,在内部会自动转换成User类型 coll.setObjectClass(User.class); User user = (User)coll.findOne(); out("user.name="+user.getName()); out("user.age="+user.getAge()); out("user.getDate()="+user.getDate()); coll.setObjectClass(BasicDBObject.class); //还原最初的对象类型 out(); user.setAge(100); coll.save(user); //保存更新 findAll(coll); //确认第一条记录的"Age"是否变成100了? coll.remove(user); //删除第一条记录 findAll(coll); //查找年纪大于等于15小于等于18的记录(15<=age<=18) //(查询条件的组合方式很嗦,这方面就没sql方便) BasicDBObject query = new BasicDBObject(); //注意这里的"Age"第一个字母要大写,如果把User类替换成UserNoReflection类就用小写, //这是因为ReflectionDBObject类的内部实现在截取setter和getter方法的"set"和"get"前缀后 //没有进行大小写转换,比如"setAge"得到的key值就是"Age" query.put("Age", new BasicDBObject("$gte", 15).append("$lte", 18)); DBCursor cur = coll.find(query); while(cur.hasNext()) { out(cur.next()); } out(); //跳过前面3条记录,然后显示总共5条记录 cur = coll.find().skip(3).limit(5); while(cur.hasNext()) { out(cur.next()); } coll.drop(); //删除coll这个DBCollection } public static void findAll(DBCollection coll) { DBCursor cur = coll.find(); while(cur.hasNext()) { out(cur.next()); } out(); } //插入DBCollection中的java对象必需实现DBObject接口, //ReflectionDBObject实现了DBObject接口,在内部是采用反射来完成的 public static class User extends ReflectionDBObject { private String name; private int age; private Date date; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void setDate(Date date) { this.date = date; } public Date getDate() { return date; } } //如果不想用反射的方式,又不想手工实现DBObject接口的方法, //可以直接继承BasicDBObject,但是需要做额外的工作, //就像下面这样: public static class UserNoReflection extends BasicDBObject { private String name; private int age; private Date date; public void setName(String name) { this.name = name; super.put("name", name); } public String getName() { return name; } public void setAge(int age) { this.age = age; super.put("age", age); } public int getAge() { return age; } public void setDate(Date date) { this.date = date; super.put("date", date); } public Date getDate() { return date; } public Object put(String key, Object v) { if(key.equals("name")) name = (String)v; else if(key.equals("age")) age = (Integer)v; else if(key.equals("date")) date = (Date)v; return super.put(key, v); } } }
把MongoTest.java文件放到D:\MongoDB目录
编译:
javac -cp D:\MongoDB\mongo-1.3.jar D:\MongoDB\MongoTest.java
运行:
java -cp D:\MongoDB\mongo-1.3.jar;D:\MongoDB MongoTest
Douyu也支持MongoDB了,比上面的代码还简洁
//对应上面的User类(或UserNoReflection类), //在Douyu中如下所示,不需要任何setter和getter代码 import douyu.mvc.Model; @Model public class User { private String name; private int age; private Date date; }
然后在conf/server.java中配置一个MongoDB的数据源(跟普通的关系型数据库类似)
最后是Controller
import java.util.Date; import douyu.mvc.Controller; import douyu.mvc.ModelManager; @Controller public class MongoTest { public void index(ModelManager modelManager) { User user = new User(); //下面三个setter方法虽然没有在User类中声明, //但是编译器在编译User类时发现User类带有@Model,就会自动生成setter、getter方法 user.setName("user 10"); user.setAge(10); user.setDate(new Date()); modelManager.insert(user); user.setAge(20); modelManager.save(user); modelManager.delete(user); //.... } }