好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java操作MongoDB插入数据进行模糊查询与in查询功能

由于需要用 mongodb 缓存数据,所以自己写了一套公共的存放和读取方法

具体如下:

存放mongodb:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

/**

    * 公共方法:设置object类型缓存

    * @author shijing

    * @param param

    * @param sysguid

    */

   public void setobjdata(map<string,object> param, string sysguid, string enumbpd){

     dbobject dbobject = new basicdbobject();

     dbobject.putall(param);

     string collectionname = enumbpd.getbpdtype(enumbpd) + sysguid;

     mongodao.inserttocol(dbobject,collectionname);

   }

   /**

    * 公共方法:设置list缓存

    * @author shijing

    * @param paramlist

    * @param sysguid

    */

   public void setlistdata(list<map<string,object>> paramlist, string sysguid, string enumbpd){

     list<dbobject> list = new arraylist<>();

     if (collectionutils.isnotnull(paramlist)){

       for (map<string,object> param : paramlist){

         dbobject dbobject = new basicdbobject();

         dbobject.putall(param);

         list.add(dbobject);

       }

     }

     string collectionname = enumbpd.getbpdtype(enumbpd) + sysguid;

     mongodao.inserttocol(list,collectionname);

mongodao里面的方法:

?

1

2

3

4

5

6

7

8

9

10

public void inserttocol(dbobject document, string collectionname) {

     dropcol(collectionname);

     dbcollection dbcollection = mongotemplate.createcollection(collectionname);

     dbcollection.insert(document);

   }

   public void inserttocol(list<dbobject> documents, string collectionname) {

     dropcol(collectionname);

     dbcollection dbcollection = mongotemplate.createcollection(collectionname);

     dbcollection.insert(documents);

   }

读取方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

/**

    * 通过关键字模糊查询问题和答案库

    * @param param

    * @return

    */

   @override

   public list<map<string, object>> searchquestionandanswerbykeyword(map<string, object> param) {

     list<map<string,object>> searchlist = new arraylist<>();

     map<string,object> userinfo = sessionutils.getuserinfo();

     string sysguid = userinfo.get( "sys_guid" ).tostring();

     string collectionname = enumbpd.getbpdtype(enumbpd.help_page_list.gettype())+sysguid;

     //注释里面这种方式虽然能模糊查询,但是容易漏掉数据,切记切记!!!

     //pattern pattern = pattern测试数据pile("^.*" + param.get("keyword") +".*$", pattern.case_insensitive);

     basicdbobject query= new basicdbobject();

     //模糊查询的字段设置

     query.put( "page_html" , pattern测试数据pile((string) param.get( "keyword" )));

     dbcursor dbcursor = mongodao.findall(query,collectionname);

     list<dbobject> list = dbcursor.toarray();

     for (dbobject dbobject: list){

       searchlist.add(dbobject.tomap());

     }

     //模糊查到的数据进行组装

     return getquestionandanswerlist(searchlist);

   }

   /**

    * 公共方法:批量—— in方法查询list数据

    * @author shijing

    * @param ids id集合

    * @param parammap 其他参数

    * @param columnname in字段列名

    * @param collectionname 表名

    * @return

    */

   @override

   public list<map<string, object>> batchsearchpagelistbyids(list<string> ids, map<string,

       object> parammap, string columnname, string collectionname) {

     list<map<string,object>> searchlist = new arraylist<>();

     basicdbobject query= new basicdbobject();

     //批量查询,in

     if (collectionutils.isnotempty(ids)){

       basicdblist values = new basicdblist();

       values.addall(ids);

       query.put(columnname, new basicdbobject( "$in" ,values));

     }

     //拼接参数

     if (maputils.isnotempty(parammap)){

       for (string mapkey: parammap.keyset()){

         query.put(mapkey, parammap.get(mapkey));

       }

     }

     dbcursor dbcursor = mongodao.findall(query,collectionname);

     list<dbobject> list = dbcursor.toarray();

     if (dbcursor!= null && dbcursor.size()> 0 ){

       for (dbobject dbobject: list){

         searchlist.add(dbobject.tomap());

       }

     }

     return searchlist;

   }

   /**

    * 公共方法:通过参数获取list数据

    * @author shijing

    * @param parammap 参数

    * @param collectionname  表名

    * @return

    */

   @override

   public list<map<string, object>> getlistbyparam(map<string, object> parammap,string collectionname){

     list<map<string,object>> searchlist = new arraylist<>();

     basicdbobject query= new basicdbobject();

     //拼接参数

     if (maputils.isnotempty(parammap)){

       for (string mapkey: parammap.keyset()){

         query.put(mapkey, parammap.get(mapkey));

       }

     }

     dbcursor dbcursor = mongodao.findall(query,collectionname);

     list<dbobject> list = dbcursor.toarray();

     if (dbcursor!= null && dbcursor.size()> 0 ){

       for (dbobject dbobject: list){

         searchlist.add(dbobject.tomap());

       }

     }

     return searchlist;

   }

   /**

    * 公共方法:通过参数获取object数据

    * @author shijing

    * @param parammap

    * @param collectionname 表名

    * @return

    */

   @override

   public map<string, object> getobjectbyparam(map<string, object> parammap, string collectionname) {

     map<string,object> websiteinfo = new hashmap<>();

     basicdbobject query= new basicdbobject();

     //拼接参数

     if (maputils.isnotempty(parammap)){

       for (string mapkey: parammap.keyset()){

         query.put(mapkey, parammap.get(mapkey));

       }

     }

     dbobject dbobject = mongodao.findone(query,collectionname);

     if (dbobject!= null ){

       return dbobject.tomap();

     }

     return websiteinfo;

   }

注意事项:

mongodb模糊查询时

?

1

pattern pattern = pattern测试数据pile( "^.*" + param.get( "keyword" ) + ".*$"

这种方式存在bug, 容易漏掉数据

应该使用下面这种方式:

?

1

query.put( "page_html" , pattern测试数据pile((string) param.get( "keyword" )));

先记录到这吧,有需要在补充,批量in方法也在上述代码里面。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/moneyshi/article/details/81567819

查看更多关于Java操作MongoDB插入数据进行模糊查询与in查询功能的详细内容...

  阅读:11次