当前位置: 首页 > news >正文

建设和交通局网站线上营销工具

建设和交通局网站,线上营销工具,创意福州网站建设,荔湾建网站公司写在前面:最近在公司实习,需要完成一个实习任务。这个任务用的是SSH框架,数据库需要使用mongoDB完成。由于刚接触MongoDB,所以不是很熟练,在网上查找了大量的资料,许多都是抄来抄去的,运行一堆错误。如今&a…

写在前面:最近在公司实习,需要完成一个实习任务。这个任务用的是SSH框架,数据库需要使用mongoDB完成。由于刚接触MongoDB,所以不是很熟练,在网上查找了大量的资料,许多都是抄来抄去的,运行一堆错误。如今,我的工作任务已经完成,现在写下此篇,希望后来的打工人少一点痛苦!

首先,我有一定的数据库基础,但对于mongo还是一无所知的小白。所以有以下疑问:

1. 数据库怎么连接?(工具类封装)

2. 数据库连接后怎么进行CRUD?(API调用肯定和命令行有区别)

3. java实体类怎么才能入mongo的库?(很重要)

4. mongo查寻出来的数据,怎么映射到实体类中,转换成Java的数据结构?(很重要)

1. 数据库的连接

首先我是win10 系统,用的最新版的mongo数据库,这里就不介绍怎么安装mongo了。其次是,我这是纯净的maven项目,没有用springboot之类的,所以就从最原生的来。

(1)导入maven坐标

        <!--MongoDB--><dependency><groupId>org.mongodb</groupId><artifactId>mongodb-driver-sync</artifactId><version>4.4.1</version></dependency>

注意:我在查阅资料的时候发现,mongo3.0+的创建数据库连接方式和mongo4.0+有区别。这里只说4.0+的。

(2)创建工具类

import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;public class MongoDBUtil {private static final String CONNECTION_STRING = "mongodb://localhost:27017";private static final String DATABASE_NAME = "weeklyTask";//不通过认证获取连接数据库对象public static MongoDatabase getConnect(){//连接到 mongodb 服务MongoClient mongoClient = MongoClients.create(CONNECTION_STRING);;//连接到数据库//返回连接数据库对象return mongoClient.getDatabase(DATABASE_NAME);}//处理pojo和Bson之间的编码问题public static CodecRegistry getCodecRegistry(){//进行编码处理return CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));}
}

注意:这个工具类里面使用的本地无认证模式的。因为我没有设置mongo的密码。

2. CRUD操作

这里的CRUD操作,我就和上述中的2,3,4问题一起说了。直接上案例:

Pojo实体类创建

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private String uid;private String name;private String number;private String password;private int role;
}
获取集合对象
        // 获取集合对象
MongoCollection<User> collection =  MongoDBUtil.getConnect().getCollection("user", User.class).withCodecRegistry(MongoDBUtil.getCodecRegistry());

PS:其实这一步就是做Java实体类和mongo文档数据映射的!因为 MongoCollection<Document>,泛型默认是Document的。这里我们直接指定是User的,然后使用了编码转换withCodecRegistry(MongoDBUtil.getCodecRegistry())。这样就可以实现互转了。后面通过collection调用的方法中的Document都可以具体的写成User了。

新增操作

(1)单个新增:

collection.insertOne(new User("1","ceshi","ceshi","123456",0));
collection.insertOne(new User("2","zhuguan","zhuguan","123456",1));

(2)批量新增:

        List<User> userList = Arrays.asList(new User("1","ceshi","ceshi","123456",0),new User("2","zhuguan","zhuguan","123456",1));collection.insertMany(userList);

PS:我们完成上述操作后,执行新增操作,不用关注mongoDB中是否存在这个集合(表),他会自己去创建这个表的,并且将结构和数据映射上去。

修改操作

(1)修改单个数据

Bson filter = Filters.eq("uid", "1");
Bson update = Updates.set("name", "ceshi");
collection.updateOne(filter, update);

(2)修改多个数据

        Bson filter = Filters.eq("uid", "1");Bson update = Updates.combine(Updates.set("name", "Test"),Updates.set("password", "ceshi"));collection.updateOne(filter, update);

(3)批量修改

Bson filter = Filters.eq("password", "123456");
Bson update = Updates.set("password", "147258");
UpdateResult result = collection.updateMany(filter, update);

(4)整行修改

场景:有时候前台直接传过来的是一个对象,你不能确定它具体修改的属性是啥。

        // 构造Bson对象,用于匹配需要更新的文档Bson filter = Filters.eq("uid", "1");// 执行替换操作collection.replaceOne(filter, new User(...));

PS:mongo的数据格式BSON类型的,他的写法和Json类似。所以写过滤条件需要使用BSON。

删除操作

(1)单个删除

        Bson filter = Filters.eq("uid", "1");collection.deleteOne(filter);

(2)批量删除(删除密码所有为:‘123456’的)

Bson filter = Filters.eq("password", "123456");
collection.deleteMany(filter);

查询操作

(1)单个查询

        Bson filter = Filters.eq("uid",uid);FindIterable<User> users= collection.find(filter);User user = users.first();

(2)多个查询(List<User>)

        Bson filter = Filters.eq("uid","1");FindIterable<User> users= collection.find(filter);List<User> userList = new ArrayList<>();//防止资源和内存泄漏,自动关闭try (MongoCursor<Weekly> iterator = users.iterator()){while (iterator.hasNext()){userList.add(iterator.next());}}catch (Exception e){logger.error("查询错误:" + e.getMessage());}

PS:当使用MongoCursor遍历查询结果时,一定要手动关闭它,否则会造成资源泄露。可以使用try-with-resources语句块来自动关闭MongoCursor。当然数据量小,不写也不影响。

(3)分页查询(List<User>)

        page = (page == 0) ? 1 : page;// 当前页数pageSize = (pageSize == 0) ? 10 : pageSize; // 每页数据量Bson filter = Filters.eq("uid","1");FindIterable<User> users= collection.find(filter).sort(Sorts.descending("startTime"))                                     .skip((page -1) * pageSize).limit(pageSize);;List<User> userList = new ArrayList<>();//防止资源和内存泄漏,自动关闭try (MongoCursor<Weekly> iterator = users.iterator()){while (iterator.hasNext()){userList.add(iterator.next());}}catch (Exception e){logger.error("查询错误:" + e.getMessage());}

(4)其他查询

查询某个字段大于特定值的数据:

Bson filter = Filters.gt("age", 18);
FindIterable<Document> result = collection.find(filter);

查询某个字段小于特定值的数据:

Bson filter = Filters.lt("age", 18);
FindIterable<Document> result = collection.find(filter);

查询某个字段包含特定值的数据:

Bson filter = Filters.in("gender", Arrays.asList("female", "unknown"));
FindIterable<Document> result = collection.find(filter);

PS:常见的查询还有很多,如:范围查询、分页查询、嵌套查询、空查询、正则表达式查询等等。有空再开博客写吧。

以上就是Idea中用java快速上手MongoDB的过程了,基本的CRUD感觉足够了。个人感觉实现业务的方式有很多种,这种可能不是最好的,但我觉得还挺方便的。本篇就大概做了快速入门,有时间写个专栏,把这段时间来的问题梳理梳理。

http://www.hrbkazy.com/news/6479.html

相关文章:

  • 国家标准下载网免费seo还有哪些方面的优化
  • 进入兔展网站做PPt网站推广软件有哪些
  • 可以玩h5的网站关键词优化难度查询
  • seo排名资源搜索引擎优化教材答案
  • 选择网站建设公司应该注意什么手机如何建网站
  • 成都网站制作建设俄罗斯搜索引擎浏览器官网入口
  • 个人做视频网站烧钱市场营销策划案的范文
  • 担路网做网站多少钱百度百家号注册
  • 威海美容网站建设百度直播间
  • 2017湖北建设教育协会网站优化网站怎么做
  • 把自己做的动画传到哪个网站上品牌推广的概念
  • 合肥专业做网站的公司郑州网站优化软件
  • wordpress 鼠标悬停成都网站优化平台
  • 县城做信息网站提升seo排名平台
  • 宝塔搭建wordpress大连百度seo
  • 猪八戒做网站河南网站关键词优化代理
  • 罗源做网站的公司模板网站好还是自助建站好
  • 自己做网站需要会什么网络推广图片
  • 用html5做网站百度经验最近发生的热点新闻
  • 网站建设与维护的国家定价标准网络服务平台
  • 网页设计大赛作品欣赏seo网站培训优化怎么做
  • 做网站公司职员工资网络营销常用的工具有哪些
  • 百度做网站教程枸橼酸西地那非片
  • 网站 前台 设计要求站长之家seo综合
  • 个人网站开发需求分析网站推广交换链接
  • 苏州做企业网站有哪些北京seo公司排名
  • 黄石城乡建设网站新媒体营销策略有哪些
  • 做一网站需要多少钱seochinaz查询
  • 云南省关于加强政府网站建设全网营销策划公司
  • 谷歌网站建站网络营销的发展现状及趋势