配置类对象数量不多,标识固定(通过标识可以获得唯一对象),但是种类较多,每种类都有自己独特的属性,如果每种类都使用一个表来存储,那么会产生大量的表,可以考虑将对象直接存储的方式来使用单独的表存储所有的配置类对象。
配置类对象的获取只有通过标识获取一种方式,所以对象存储表只需要两个核心字段,1)标识2)对象本身,对象可以通过序列化或者josn方式存储。对象存储作为内部机制,不对外暴露,外部使用时只需要知道对象本身即可
public class ObjectStore extends AbstractEntity{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;//对象的标识。可以是复合key,比如 积分规则中 key为角色+日常教学(目前没有角色,以后可能会扩展到角色)
private String object;//对象在数据库中以字符串方式存储
private Integer projectId;
private Integer creatorId;
private Date createDate;
private Integer modifierId;
private Date modifyDate;
一个具体的配置对象
public class HomeworkScoreCFG {
private int submitOne; //每份合格作业,获得多少积分
private List<KeyValue> recommLevels;//每级推荐获得多少积分,有多少推荐级别,key使用推荐级别,value是分数
private boolean enabled = false;
/**
* 返回key名
* @return
*/
public static String keyName() {
return "HomeworkScoreCFG";
}
//如果需要根据角色配置不同,那么keyName增加roleId参数即可
public static String keyName(Integer roleId) {
return "HomeworkScoreCFG"+roleId;
}
通过下面两个方法获取和保存
@Autowired
private ObjectStoreService objectStoreService;
public HomeworkScoreCFG getHomeworkScoreCFG(){
return objectStoreService.selectByKey(HomeworkScoreCFG.class,HomeworkScoreCFG.keyName());
}
public void saveOrUpdateHomeworkScoreCFG(HomeworkScoreCFG homework){
objectStoreService.saveOrUpdate(homework, HomeworkScoreCFG.keyName());
}
@Service
public class ObjectStoreService {
@Autowired
private ObjectStoreMapper objectStoreMapper;
/**
* 根据传入的key,及对应的Class返回实体,如果查询到的结果为null,返回一空构造的对象
* @param clazz
* @param key
* @return
*/
public <T> T selectByKey(Class<T> clazz,String key){
Integer projectId = ProjectContextUtils.getProjectContext().getProjectId();
ObjectStore objectStore = objectStoreMapper.selectByKey(key,projectId);
if(objectStore == null){
try {
return clazz.newInstance();
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
return JsonUtils.toBean(objectStore.getObject(),clazz);
}
/**
* 新增或修改
* @param t
* @param name
*/
public <T> void saveOrUpdate(T t,String name){
ObjectStore os = objectStoreMapper.selectByKey(name, ProjectContextUtils.getProjectContext().getProjectId());
if(os == null){//新增
ObjectStore os1 = new ObjectStore();
os1.setName(name);
os1.setObject(JsonUtils.toJson(t));
objectStoreMapper.insert(os1);
}else{//修改
os.setName(name);
os.setObject(JsonUtils.toJson(t));
objectStoreMapper.updateByName(os);
}
}
}
相关推荐
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是 类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。 上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友,...
13-1 Hos服务登陆验证 13-2 Hos服务web权限配置类开发 13-3 Hos服务用户及权限管理接口开发 13-4 Hos服务文件管理接口开发 13-5 Hos服务API接口测试 第14章 子模块-SDK模块 开发并测试Hos服务的SDK模块,SDK模块为...
基于 Java Web 项目的 SpringBoot 框架初始化模板,该模板整合了常用的框架,保证大家在此基础上能够快速开发自己的项目,该模板针对于后端启动...20、对象存储、消息队列、缓存、分布式锁、限流、国际化、网络等工具类
同样地,任何JavaScript这类面向对象程序语言的元素,也都是对象。这些对象都通过分级系统,作为主体的一部分。举例来说,浏览器窗口是一个对象,包含了几个文档对象,这些对象进而形成其他对象,依此类推,这个分级...
通过使用这个对象,Servlet可以记录事件、得到资源并得到来自Servlet引擎的类(例如RequestDispatcher对象)。一个Servlet只能运行在一个Servlet环境中,但是不同的Servlet可以在Servlet引擎上有不同的视图。 如果...
AClass.as ---------------------- 获取对象所属的类 all.as ---------------------- 全体对象调整 some.as ---------------------- 遍历并调用对象集属性 move: BasicMove.as ---------------------- 简单的...
RESTful统一 ... 通过http请求从Unity场景访问并封装游戏对象的状态。 这个项目是在3D原型制作原型期间创建的,其中可以通过访问和控制游戏对象。... 在配置类中存储和配置路由 创建参数化路由路径 从请求访问
7.4.2.2 利用ClassWizard加载ADO对象类 7.4.2.3 通过COM API使用ADO 7.4.3 创建使用ADO的代码组件——例程ADOSamp 7.4.4 创建数据源 7.4.5 编写客户程序 7.4.6 三层软件应用模型 小结 第8章 OLE文档与ActiveX文档 ...
使用装饰类存储库统一管理数据处理 使用Dagger2-Hilt实现对象的管理注入,多初始化的通讯 设计模式 单例模式:使用单例模式创建管理数据库对象 代理模式:使用代理模式加载网络数据和本地数据 装饰者模式:使用装饰...
从原始统一资源定位符队列中弹出RawUrl对象,借助域名解析系统(DNS)获 取服务器的IP地址,构造DnsUrl对象压入解析统一资源定位符队列。 2.3.2. 发送线程(SendThread) 通过WebCrawler对象启动新的抓取任务,从解析...
4.2.4.泛型类的对象创建 4.2.4.1.通过构造器创建泛型类的对象 4.2.4.2.通过静态工厂方法创建泛型类的对象 4.2.4.3.通过实例工厂方法创建泛型类的对象 4.2.5.对象标识符(id和name) 4.2.6.Singleton和Prototype ...
java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...
使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,在项目配置、类 库导入、模版引擎、查询语言...
• 面向对象开发概念(类、对象、属性、封装性、继承性、多态性、对象之间的引用) • 面向对象开发方法的优越性以及有效领域 • 面向对象设计方法(体系结构、类的设计、用户接口设计) • 面向对象实现...
本地安全存储 181 4.1.7.8. 数据传输安全 181 4.1.7.9. 数据库安全机制 182 4.1.7.10. 容错机制 182 4.1.7.11. 数据同步 183 4.1.7.12. 服务器集群和负载均衡 183 4.1.7.13. 防火墙 184 4.1.8 项目交付定义 ...
而缓存为了限制其内存的使用 ,通常都会配置成可以自动的将对象移除。在某些情况下即使不自动移除对象也是非常 有用的,如LoadingCache它会自动加载缓存对象。Ehcache 3.x:是一种广泛使用的开源Java分布式缓存。...
类和对象的描述 32 声明类 32 声明属性 33 声明成员方法 34 源文件的布局 36 包的声明 36 包与目录的布局 38 内容总结 45 独立实践 46 第四章: Java语法基础 47 学习目标 47 基本语法元素 48 Java关键字 49 基本...
配置对象,它是用于存储配置参数的全局对象页面和控件的抽象。 除了页面对象模型外,该库还提供用于管理控件的类。 所有页面和控件不仅可以作为程序对象进行寻址,还可以通过分配的逻辑名称进行寻址。 Cucumber-JVM...
5.3 利用page的事件进行统一 5.3 身份验证 52 5.4 ispostback属性 54 5.5 validaterequest属性 55 5.6 clientscript属性 56 5.7 回调技术 60 5.8 总结 67 第6章 asp.net基本控件 68 6.1 asp.net服务器控件...