GithubHelp home page GithubHelp logo

t-baby / mongodb-plugin Goto Github PK

View Code? Open in Web Editor NEW
239.0 42.0 102.0 150 KB

MongoDB Plugin for Java

License: Apache License 2.0

Java 100.00%
mongodb-plugin jfinal java mongodb mongodb-orm mongodb-driver spring

mongodb-plugin's People

Contributors

cos-core avatar greenbamm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mongodb-plugin's Issues

增加对JSON插入,更新等的直接支持.

目前的Plugin无法直接支持JSON的插入,更新等操作,建议增加该项功能,当前如果需要将JSON存进去,要么得转成BSON,要么得用MongoBean,否则提示找不到fastjson的编码器.

使用MongoJFinalPlugin 的setDebug影响全局log等级问题

当在configPlugin处添加MongoJFinalPlugin 并设置debug为false时,全局的log等级都将变成warn,直接覆盖了logback.xml配置的root的等级,如果logback.xml root等级为Info,则项目中的Info日志均不会输出。只有大于等于warn的日志才会输出。

存在NumberLong类型转换错误的问题

@T-baby

重现方式,在AccountBean里面新建属性:

private Long createDate;

// insert的时候存入时间戳
bean.setCreateDate(System.currentTimeMillis());

这是执行findById或者其他有ClassZ类型转换的测试,就会异常:

com.alibaba.fastjson.JSONException: can not cast to long, value : {"$numberLong":"1471597786181"}

MongoPaginate 中的判断条件是不是冲突

count 要是每页的行数的话怎么能大于总数呢,要是结束的行数的话(long) this.page * (long) this.count>totalRow不是一定会为true吗?

if (count > totalRow) {
this.count = (int) totalRow;
}

    if (this.count <= 0 || this.page <= 0 || this.page > totalPage || (long) this.page * (long) this.count > totalRow) {
        throw new RuntimeException("MongPage tips: (づ ̄ 3 ̄)づ count or page is error !");
    }

通过aggregate查询出来的日期格式和find出来的不同.

通过find出来的日期格式,是可以被fastjson正常识别的日期格式,但aggregate出来的日期格式,是MongoDB标准的日期格式, 这种格式不被fastjson所识别,请修正.
例如:
用find取出来的日期, 格式为: {"startTime":1497422308377}
用aggregate出出来的日期,格式为 {"startTime":{$date,1497422308377}}

增加对子集中数组的处理.

希望增加对子集中数组的处理功能,目前的方法,只能对子集进行整个替换,效率太低.

  1. 在子集数组中增加一项,用$push
    2.修改子集数组的某一栏,用{$set:{arrayname.$.colname,value)}
    3.替换子集数组中的某一行,用{$set:{arrayname.$,value}}, 该种情况必须保证查询条件可以查到有效的结果集,否则更新时会报错.

当查询条件是多个字段时,如何查找?

我遇到下面这个情况(伪代码)
MongoQuery query = new MongoQuery().use("somedb");
Map<String, String> cons = ...; // {"f1":123,"f2":"abc"}
for(String key : cons.keySet()){
query.set(key, cons.get(ke)); //以为会添加查询条件
}
query.findAll(); //结果输出所有数据,之前set的条件并不生效
请问这种情况一般是怎么处理的?

tomcat 启动报java.lang.UnsupportedClassVersionError

严重: Exception starting filter jfinal java.lang.UnsupportedClassVersionError: com/cybermkd/mongo/plugin/MongoJFinalPlugin : Unsupported major.minor version 52.0 (unable to load class com.cybermkd.mongo.plugin.MongoJFinalPlugin)

tomcat 版本7.0.x
jdk 版本1.7.0_80
mongoplugin 版本 1.0.8.0

jfinal里的配置
MongoJFinalPlugin jFinalPlugin = new MongoJFinalPlugin(); jFinalPlugin.add(PropKit.get("mongodb.host"), PropKit.getInt("mongodb.port")); jFinalPlugin.setDatabase(PropKit.get("mongodb.db")); jFinalPlugin.auth(PropKit.get("mongodb.user"), PropKit.get("mongodb.password")); jFinalPlugin.setDebug(true); plugins.add(jFinalPlugin);

完整错误信息
java.lang.UnsupportedClassVersionError: com/cybermkd/mongo/plugin/MongoJFinalPlugin : Unsupported major.minor version 52.0 (unable to load class com.cybermkd.mongo.plugin.MongoJFinalPlugin) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2963) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1212) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1692) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1573) at com.fxtcn.jfinal.GovLogSysConfig.configPlugin(GovLogSysConfig.java:42) at com.jfinal.core.Config.configJFinal(Config.java:53) at com.jfinal.core.JFinal.init(JFinal.java:63) at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49) at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4855) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5549) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)

2.0改版建议大搜集

  • README中增加交流群。
  • 支持多个数据库连接。
  • 支持通过注解声明集合名。
  • 支持通过注解声明是否是日期。
  • 更加深入的封装聚合运算。
  • 通过注解声明哪个字段是id。

com.cybermkd.mongo.kit.MongoQuery.exist(String)

com.cybermkd.mongo.kit.MongoQuery.exist(String) 似乎存在问题,无法做到字段过滤(我理解问题?)。
可以做如下修改

public MongoQuery exist(String key) {
        query.add(Filters.exists(key));
        return this;
    }

可以增加如下方法:

/**
     * 是否存在某个key
     * @param key
     * @param exists true 存在,false 不存在
     * @return
     */
    public MongoQuery exist(String key,boolean exists) {
    	query.add(Filters.exists(key,false));
    	return this;
    }

一些使用建议

请酌情采纳 @T-baby

  1. 建议删除validation验证相关代码,具体项目中不会在DB操作层去做强验证,MVC里面,验证在最上层的Controller层会处理,多次处理容易导致误解和增加业务复杂度;也更加单纯,减少几个依赖。
  2. MongoKit是static的,建议更改成单例,或者采用enum方式实现单例,毕竟是有数据库驱动连接池的,单例比较好;
  3. MongoKit提供带参构造,可通过构造进行初始实例化,也更好的兼容类型Spring框架的AOP注入,JFinal一样可以继承之后通过构造进行初始化;
  4. Test建议改用单元测试,只需要继承TestCase就行了

使用MongoPaginate 分页时,查询数据为空则一直抛出异常

MongoPaginate line - 35
if (count > totalRow) { this.count = (int) totalRow; } if (this.count <= 0 || this.page <= 0 || this.page > totalPage) { throw new RuntimeException("MongPage tips: (づ ̄ 3 ̄)づ count or page is error !"); }
当 查询结果为空,赋值 this.count为空,始终抛出下面异常

findOne查询一条记录时的问题

不管是否有此记录,findOne() 都能返回一个不为空的对象。
看代码后,发现是如下代码
见:com.cybermkd.mongo.kit.MongoKit.parseObject(Document, Class)
private T parseObject(Document doc, Class clazz) {
try {
if (doc == null) {
return JSON.parseObject(new JSONObject().toJSONString(), clazz);
}
return JSON.parseObject(JSON.toJSONString(doc), clazz);
} catch (NullPointerException e) {
error("parseObject", clazz.getName());
return JSON.parseObject(new JSONObject().toJSONString(), clazz);
}
}

doc == null 也 new一个 对象出来。
个人觉得,应该返回null

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.