db4o java_java com.db4o 类

db4o java_java com.db4o 类packageorg.rx.repository.db4o.impl;importcom.db4o.Db4o;importcom.db4o.ObjectContainer;importcom.db4o.ObjectSet;importcom.db4o.config.Configuration;importlombok.SneakyThrows;importorg.rx.api.dto.common…

大家好,又见面了,我是你们的朋友全栈君。

packageorg.rx.repository.db4o.impl;importcom.db4o.Db4o;importcom.db4o.ObjectContainer;importcom.db4o.ObjectSet;importcom.db4o.config.Configuration;importlombok.SneakyThrows;importorg.rx.api.dto.common.PagedResponse;importorg.rx.api.dto.common.PagingRequest;importorg.rx.beans.BeanMapper;importorg.rx.beans.DateTime;importorg.rx.common.App;importorg.rx.common.InvalidOperationException;importorg.rx.common.NQuery;importorg.rx.repository.db4o.IRepository;importorg.rx.repository.db4o.DataObject;importorg.springframework.stereotype.Component;importjava.util.ArrayList;importjava.util.Comparator;importjava.util.List;importjava.util.UUID;importjava.util.function.Function;importjava.util.function.Predicate;import staticorg.rx.common.Contract.require;

@Componentpublic class Db4oRepository implements IRepository{privateString dbPath;privateConfiguration config;

@SneakyThrowspublicDb4oRepository() {

dbPath= App.readSetting(“app.repository.dbFile”);if (dbPath == null) {throw new InvalidOperationException(“app.repository.dbFile is empty”);

}

String dir=dbPath;int i = dir.lastIndexOf(“/”);if (i != -1) {

dir= dir.substring(0, i);

}

App.createDirectory(dir);

config=Db4o.newConfiguration();

}protected R invoke(Functionfunc) {return NQuery.of(invoke((Function[]) newFunction[]{func})).firstOrDefault();

}protected synchronized List invoke(Function… funcList) {

require(funcList);

List result = new ArrayList<>();//ObjectContainer db = Db4o.openFile(config, dbPath);

ObjectContainer db = App.getOrStore(“Db4oRepository-threadDb”, k ->Db4o.openFile(config, dbPath));try{for (Functionfunction : funcList) {

result.add(function.apply(db));

}

db.commit();

}catch(Exception e) {

db.rollback();throwe;

}//finally {//db.close();//}

returnresult;

}publicT save(T model) {

require(model);if (!(model instanceofDataObject)) {throw new IllegalArgumentException(“model is not a DataObject”);

}return invoke(db ->{

T dataObj= single(p ->p.getId().equals(model.getId()));if (dataObj != null) {

dataObj= BeanMapper.getInstance().map(model, dataObj, BeanMapper.Flags.NonCheckMatch |BeanMapper.Flags.SkipNull);

}else{

dataObj=model;

}if (dataObj.getId() == null) {

dataObj.setId(UUID.randomUUID());

}if (dataObj.getCreateTime() == null) {

dataObj.setCreateTime(DateTime.now());

}

dataObj.setModifyTime(DateTime.now());

db.store(dataObj);returndataObj;

});

}

@OverridepublicT delete(UUID id) {

T model=single(id);if (model == null) {return null;

}

model.setDeleted(true);returnsave(model);

}

@OverridepublicT single(UUID id) {return single(p ->p.getId().equals(id));

}

@Overridepublic T single(Predicatecondition) {returnNQuery.of(list(condition)).firstOrDefault();

}

@Overridepublic long count(Predicatecondition) {return executeReader(condition, null, false).count();

}

@Overridepublic List list(Predicatecondition) {return list(condition, null);

}

@Overridepublic List list(Predicate condition, FunctionkeySelector) {return executeReader(condition, keySelector, false).toList();

}

@Overridepublic List listDescending(Predicate condition, FunctionkeySelector) {return executeReader(condition, keySelector, true).toList();

}

@Overridepublic PagedResponse page(Predicate condition, FunctionkeySelector, PagingRequest pagingParam) {

require(pagingParam);

NQuery nQuery = executeReader(condition, keySelector, false);returnpagingParam.page(nQuery);

}

@Overridepublic PagedResponse pageDescending(Predicate condition, FunctionkeySelector, PagingRequest pagingParam) {

require(pagingParam);

NQuery nQuery = executeReader(condition, keySelector, true);returnpagingParam.page(nQuery);

}private NQuery executeReader(Predicate condition, Function keySelector, booleanisDescending) {

require(condition);

com.db4o.query.Predicate predicate = new com.db4o.query.Predicate() {public booleanmatch(T candidate) {return !candidate.isDeleted() &&condition.test(candidate);

}

};return invoke(db ->{

ObjectSetobjectSet;if (keySelector == null) {

objectSet=db.query(predicate);

}else{

Comparator comparator =getComparator(keySelector);if(isDescending) {

comparator=comparator.reversed();

}

objectSet=db.query(predicate, comparator);

}returnNQuery.of(objectSet);

});

}private Comparator getComparator(FunctionkeySelector) {if (keySelector == null) {return(Comparator) Comparator.naturalOrder();

}returnNQuery.getComparator(keySelector);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162577.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html左右循环滚动代码,不间断循环滚动效果的实例代码(必看篇)

    html左右循环滚动代码,不间断循环滚动效果的实例代码(必看篇)滚动测试/***@paraobj目标对象如:demo,deml1,demo2中的”demo”可任意,只要不重复**@paraspeed滚动速度越大越慢**@paradirection滚动方向包括:left,right,down,up**@paraobjWidth总可见区域宽度**@paraobjHeight总可见区域高度**@parafilePath存…

    2022年7月18日
    55
  • SQL Developer_Netbank

    SQL Developer_NetbankOracle .Net Develoer

    2022年4月22日
    49
  • QCustomPlot系列(5)-实时动态曲线[通俗易懂]

    QCustomPlot系列(5)-实时动态曲线[通俗易懂]先来个动图看看效果:支持鼠标平移、滚轮缩放、框选放大、取消框选、一键全显、单击显示xy坐标值。。等平移功能是QCustomPlot自带的功能,参见我的该系列前面的博文。框选放大、全显等功能在另一篇博文中也讲到了。这里只讲2个知识点:1、显示鼠标指向的点坐标,2、实时滚动1、箭头指向要显示的坐标点,代码步骤:(1)添加新类,继承QCustomPlot添加private成员变…

    2022年10月16日
    5
  • pathname_not found in java.library.path

    pathname_not found in java.library.path|–ContextPath–|–ServletPath-|–PathInfo–|http://www.myserver.com/mywebapp/helloServlet/hello|——–RequestURI—————————-|

    2022年9月17日
    3
  • linux+shell脚本100,shell脚本(shell编程100例)

    linux+shell脚本100,shell脚本(shell编程100例)ShellScript,Shell脚本与Windows/Dos下的批处理类似,也便是用各类指令预先放入到一个文件中,便利一次性执行的一个程序文件,主要是便利办理员进行设置或许办理用的。可是它比Windows下的批处理更强大,比用其他编程程序修改的程序功率更高,它使用了Linux/Unix下的指令。shell编程100例1、编写helloworld脚本#!/bin/bash#编写helloworld…

    2022年10月3日
    2
  • 用matlab求二元函数的极限_matlab求极大值

    用matlab求二元函数的极限_matlab求极大值实验五用matlab求二元函数及极值实验五??用matlab求二元函数的极值?1.计算二元函数的极值对于二元函数的极值问题,根据二元函数极值的必要和充分条件,可分为以下几个步骤:步骤1.定义二元函数.步骤2.求解方程组,得到驻点.步骤3.对于每一个驻点,求出二阶偏导数步骤4.对于每一个驻点,计算判别式,如果,则该驻点是极值点,当为极小值,为极大值;如果,需进一步判断此驻点是否为极值点;如果…

    2025年9月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号