Properties ORM

实现

最近突发奇想,java使用properties时每次都要调用getProperty方法获取配置信息,有时还要转换类型,这有点不方便,于是就自己实现了一个从properties到类的映射功能,方便读取配置信息。实现原理非常简单,利用java的反射功能找到类的所有公共字段,然后利用字段名作为key从properties中查找value,再将value转换为字段对应的类型。注意,类字段必须为public,且字段名必须与配置key一致,类无需getter\setter,因为字段都是public

/**
 * 通过反射实现properties到java类文件的映射,目前支持类型:boolean,byte,short,int,float,double,long,string,
 * java bean字段名必须与properties配置key一致,且必须为public
 * @author lhl
 *
 * 2015年7月7日下午2:54:50
 */
public class ConfigParser
{
	/**
	 * 从类路径加载配置并映射到类
	 * @param file
	 * @param clas
	 * @throws IllegalStateException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws IOException
	 */
	public static void parseFromClassPath(String file, Class<?> clas) throws IllegalStateException, IllegalArgumentException, IllegalAccessException, IOException
	{
		Properties prop = loadFromClassPath(file);
		assignment(clas, prop);
	}

	/**
	 * 从类路径加载配置
	 * @param file
	 * @return
	 * @throws IOException
	 */
	private static Properties loadFromClassPath(String file) throws IOException
	{
		Properties prop = new Properties();
		try (InputStream inStream = ConfigParser.class.getClassLoader().getResourceAsStream(file))
		{
			prop.load(inStream);
		}
		return prop;
	}

	/**
	 * 给字段赋值
	 * @param obj
	 * @param prop
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	private static void assignment(Class<?> obj, Properties prop) throws IllegalArgumentException, IllegalAccessException
	{
		Field[] allFields = obj.getFields();
		for (Field field : allFields)
		{
			Class<?> type = field.getType();
			String fieldName = field.getName();
			String value = prop.getProperty(fieldName);
			if (type == boolean.class)
			{
				field.setBoolean(obj, Boolean.parseBoolean(value));
			}
			else if (type == byte.class)
			{
				field.setByte(obj, Byte.parseByte(value));
			}
			else if (type == short.class)
			{
				field.setShort(obj, Short.parseShort(value));
			}
			else if (type == int.class)
			{
				field.setInt(obj, Integer.parseInt(value));
			}
			else if (type == float.class)
			{
				field.setFloat(obj, Float.parseFloat(value));
			}
			else if (type == double.class)
			{
				field.setDouble(obj, Double.parseDouble(value));
			}
			else if (type == long.class)
			{
				field.setLong(obj, Long.parseLong(value));
			}
			else if (type == String.class)
			{
				field.set(obj, value);
			}
		}
	}
}

测试类:

/**
 * @author lhl
 *
 * 2015年7月30日下午5:53:13
 */
public class TestConfig
{
	public static String fieldA;
	public static byte fieldB;
	public static short fieldC;
	public static int fieldD;
	public static boolean fieldE;
	public static float fieldF;
	public static double fieldG;
	public static long fieldH;
}

测试配置文件app.properties:

fieldA=this is first  field
fieldB=2
fieldC=3
fieldD=4
fieldE=true
fieldF=5
fieldG=6
fieldH=7

使用方法:

ConfigParser.parseFromClassPath("app.properties", TestConfig.class);
时间: 2024-10-07 05:02:40

Properties ORM的相关文章

Database ORM

Database ORM Introduction Basic Usage Mass Assignment Insert, Update, Delete Soft Deleting Timestamps Query Scopes Relationships Querying Relations Eager Loading Inserting Related Models Touching Parent Timestamps Working With Pivot Tables Collection

C#轻型ORM框架PetaPoco试水

近端时间从推酷app上了解到C#轻微型的ORM框架--PetaPoco.从github Dapper 开源项目可以看到PetaPoco排第四 以下是网友根据官方介绍翻译,这里贴出来. PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项--单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的Poco类,和几乎全部加了特性的Poco类 Insert/Delete/Update/Save and IsNew

Spring整合ORM技术 -- 集成Hibernate

1.Spring整合ORM方案的好处: 方便基础设施的搭建.不同的ORM技术都有一套自己的方案以初始化框架.搭建基础设施等.在搭建基础设施中,数据源是不可或缺的资源,不同的ORM框架的实现方式各不相同.Spring针对不同的ORM框架,采用相同的方式配置数据源,并为不同的ORM框架提供相同的FactoryBean,用以初始化ORM框架的基础设施,可以把它们当成普通Bean对待. 异常封装.Spring能够转化各种ORM框架抛出的异常,将ORM框架专有的或检查型异常转换为SpringDAO异常体系

ORM(Object-Relational Mapping 对象关系映射)如何实现(转)

原文链接:http://blog.163.com/hzd_love/blog/static/13199988120107891854473/ 1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作.因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作. 2.什么是Hibernate 对于Hibernate的称呼有

[转]Android ORM系列之GreenDao最佳实践

GreenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储.更新.删除和查询. GreenDao有两个项目,一个是生成dao和model的generator的项目,该项目是java项目,一个是用于android的核心jar包.在使用前,我们必须先生成dao和model. 首先加入依赖. compile 'de.greenrobot:greendao:2.0.0' comp

【译】微型ORM:PetaPoco【不完整的翻译】

PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的Poco类,和几乎全部加了特性的Poco类 Insert/Delete/Update/Save and IsNew 等帮助方法. 分页支持:自动得到总行数和数据 支持简单的事务 更好的支持参数替换,包括从对象属性中抓取命名的参数. 很好的性能,剔除了Linq,并通过Dynamic方法快速的为属性赋值

《Andorid开源》greenDao 数据库orm框架

一 前言:以前没用框架写Andorid的Sqlite的时候就是用SQLiteDatabase ,SQLiteOpenHelper ,SQL语句等一些东西,特别在写SQL语句来进行 数据库操作的时候是一件很繁琐的事情,有时候没有错误提示的,很难找到错误的地方,即费力又花时间. 现在使用greenDao就可以避免那些繁琐的SQL文了,极大的简化了对Sqlite的操作. greenDao官方网址是:http://greendao-orm.com/ greenDao官方demo下载地址:https://

atitit.动态加载数据库配置in orm hibernate mybatis

atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象,,,,生成工厂类,在opoenSession 1 2.1. Hibernate动态添加配置流程 1 2.2. mybatis动态添加配置流程 1 2.3. #===hb code 2 3. 参考 3 1. 动态加载数据库配置的优点::: 1.1. 组合多个配置文件... 1.2. 连接多个数据库 2

FluentData -Micro ORM with a fluent API that makes it simple to query a database 【MYSQL】

官方地址:http://fluentdata.codeplex.com/documentation MYSQL: MySQL through the MySQL Connector .NET driver. 连接字符串:Server=127.0.0.1;Database=testDB;Uid=root;Pwd=jnex;<system.data> <DbProviderFactories> <add name="MySQL Data Provider" i