配置类对象数量不多,标识固定(通过标识可以获得唯一对象),但是种类较多,每种类都有自己独特的属性,如果每种类都使用一个表来存储,那么会产生大量的表,可以考虑将对象直接存储的方式来使用单独的表存储所有的配置类对象。
配置类对象的获取只有通过标识获取一种方式,所以对象存储表只需要两个核心字段,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);
}
}
}
相关推荐
`CPSConfigUtils`可能是提供了一系列静态方法的工具类,用于读取和处理配置信息,而`CPSConfig`可能是一个配置对象,封装了具体的配置属性,便于在整个项目中进行访问和使用。这两个类通常会包含加载配置文件、获取...
- **集中化管理**: 实现资料的集中存储和管理,便于统一控制和调度。 - **规范化流程**: 建立标准化的工作流程,减少人为因素的影响。 - **高效处理**: 提升处理速度,降低出错率,提高整体效率。 - **降低成本**: ...
这类库的目标是提供一个统一的接口,使得开发者可以方便地在不同的浏览器上使用本地存储功能,同时确保数据的兼容性和一致性。`persist-js`就是一个这样的库,它抽象了不同浏览器的本地存储实现,提供了一个简单的...
在Android开发中,数据存储与访问是至关重要的环节,它涉及到应用程序如何持久化用户数据、配置信息以及应用程序内部状态。本教程将深入探讨Android中的几种主要数据存储方式,包括Shared Preferences、SQLite数据库...
在具体应用策略方面,云存储技术的应用涉及到数据备份集中化方案,即数据不再分散存储在不同的物理位置,而是统一存储在云存储系统中,便于管理和备份。此外,根据不同的业务场景和需求,选择合适的云存储服务模型也...
SharedPreferences提供了一个轻量级的存储方案,适合保存用户设置和简单的配置数据。数据以键值对的形式存储,类型可以是基本数据类型(如布尔、整型、浮点型等)和字符串。使用SharedPreferences时,我们通常会...
适用于存储应用特有的文件,如配置文件或缓存数据。 3. **外部存储**:当需要存储大文件,如图片、音频或视频时,可以使用外部存储(SD卡)。需要注意的是,外部存储是公共的,其他应用也可能访问,因此要妥善处理...
在`ObjectPool`类中,定义了一些重要的成员变量,如配置参数`paraObj`、对象类型`clsType`以及一个用于存储对象的`Vector`容器。此外,还定义了两个核心方法:`getObject()`和`returnObject()`。 - **getObject()**...
Ceph是一个开源的统一存储系统,它提供了对象存储、块存储和文件存储三种服务。Ceph的设计目标是提供高可用性、性能和数据一致性,特别适合大规模云环境和容器化场景。Ceph通过RADOS( Reliable Autonomic ...
XML(Extensible Markup Language)是一种被广泛使用的数据交换格式,在Android开发中,XML存储主要用于保存一些简单的配置信息。常用的XML存储方式为通过`SharedPreferences`来实现。 - **SharedPreferences存储**...
1. **pageContext对象**:它是所有其他内建对象的存储库,提供了访问请求、响应、session、application等对象的统一接口。通过它,开发者可以在不同的作用域之间传递数据。 2. **request对象**:代表客户端发送到...
在Java中,类是创建对象的模板,而对象是类的实例。学生需要理解类、对象、封装、继承和多态等核心OOP概念。 1. 类与对象:设计媒体播放器类,包括播放器的状态(如暂停、播放、停止),媒体文件的属性(如类型、时...
7. **Config对象**:ServletConfig对象,包含了JSP页面的配置信息,如初始化参数,这些参数在web.xml中定义。 8. **Exception对象**:如果JSP页面抛出未捕获的异常,这个对象会包含异常信息。在错误处理页面中可以...
SharedPreferences不支持复杂数据类型的存储和查询,但因其简单易用,对于存储少量配置信息非常合适。 2. **文件存储数据** 文件存储数据是另一种基本的存储方式,适用于需要存储大量文本、图片或其他非结构化...
本主题聚焦于一个特定的Java类——"DBManager",这是一个通用的数据库连接类,设计用于简化数据库操作,特别是对存储过程的支持,并且具备参数自动识别功能。 首先,让我们了解Java中的数据库连接。Java通过JDBC...
它可以封装SQLite数据库、文件系统等存储方式,提供统一的接口供其他应用查询和修改数据。 6. **文件系统**:直接操作文件,适用于存储文本、图片、音频等非结构化数据。可以使用File类进行读写操作,但需要注意...
- **统一管理页面对象**: 提供了一种统一的方式访问页面中的各种内置对象。 - **属性访问**: 可以轻松地获取或设置页面中的属性值。 **示例代码**: ```csharp // 设置PageContext变量 PageContext pageContext = ...
### JSP内建对象简介与应用 ...通过以上介绍和实例,我们可以看到JSP内建对象在处理请求、生成响应、管理会话和配置信息等方面发挥着至关重要的作用。掌握这些对象的使用,对于构建高效、稳定的Web应用程序至关重要。
通过`ReadConfig`方法,开发者可以轻松读取任何类型的配置对象,只需提供配置文件的路径和一个匹配的强类型类。同样,`WriteConfig`方法则用于将对象写入配置文件。 在提供的文件列表中,"ConfigurePattern.sln"是...
标题“动态创建控件,使用类对象管理并获取控件的值”指向了一个关键的编程实践:通过编程方式生成控件,并使用类对象来维护这些控件的状态和交互。在这个场景下,我们将探讨如何利用Objective-C或Swift中的Cocoa...