`
SwineX
  • 浏览: 36247 次
  • 性别: Icon_minigender_1
  • 来自: 常德
社区版块
存档分类
最新评论

ORM基于反射的简单实现

阅读更多
1.写在前面
前几天听胡老师讲了反射,本来想做个对ajax的框架的,像dwr那样,不过....额.....能力不够。所以做了个类似Hibernate的东西。以下是对save方法的简单实现

2.思路
a.前提: 
  数据库中的表名必须与对象的名字一致
  表格属性必须与对象属性在内容和类型上保持一致(属性名最大首字母大写,原因嘛...)
  对象中必须写好相关的get和set方法
b.获得传入对象的类,利用反射解析出类的:
  classname:作为表名
  fieldname:作为表格属性名
c.利用属性名获得相应属性的get方法,取得相应属性的值
d.将表名,属性名,相应属性的值组装成sql的字符串语句,根据数据类型不同,值得字符串形式也有不同。
e.执行语句


3.代码:
Session.java:
public class Session {

	public boolean save(Object obj) {
		//获得对象的class对象
		Class c = obj.getClass();
		//类名即为表名
		String tablename = c.getName();
		tablename = tablename.substring(tablename.lastIndexOf(".")+1);
		//表属性集合
		String attributes = "(";
		//表实体集合
		String entities = "(";
		//获得obj属性对象列表(这样连private的属性也可以获得了)
		Field[] fields = c.getDeclaredFields();
		for(Field f : fields){
			String attr = f.getName();//获得属性名
			attributes += attr + ",";//组装属性集
			Method getter = getMethod(c,"get" + attr,null);//取得属性f的get方法
			try{
				Object value = getter.invoke(obj);//传入保存对象obj,得到f的值
				//类型判断暂只支持int 和 String
				if(f.getType() == int.class){
					entities  += value + ",";
				}
				else{
					entities  += "'" + value + "',";
				}
				System.out.println(attr + ":" + value);
			}catch(Exception e){
				System.out.println("方法调用时:");
				e.printStackTrace();
			}
			
			
			
		}
		
		//去掉最后的一个逗号
		attributes = attributes.substring(0, attributes.lastIndexOf(","));
		attributes += ")";
		entities = entities.substring(0, entities.lastIndexOf(","));
		entities += ")";
		
		System.out.println(attributes);
		System.out.println(entities);
		
		//拼接SQL语句
		String sql = "insert into "+ tablename+ " " + attributes + " values " + entities;
		System.out.println(sql);
		
		try{
			//通过连接获得PreparedStatement
			PreparedStatement ps = ConnFactory.getConn().prepareStatement(sql);
			//执行语句
			if(ps.executeUpdate() > 0){
				return true;
			}
		}catch(Exception e){
			System.out.println("sql语句执行时:");
			e.printStackTrace();
		}
		return false;
	}
	
	/**
	 * 获取方法
	 * @param c :方法所在类
	 * @param methodName 方法名
	 * @param params 参数类型
	 * @return
	 */
	private  Method getMethod(Class c,String methodName,Class[] params){
		Method m = null;
		try{
			//得到类的方法对象
			m = c.getMethod(methodName, params);
		}catch(Exception e){
			e.printStackTrace();
		}
		return m;
	}


student.java:
public class Student {
	private int ID;
	private String Name;
	public int getID() {
		return ID;
	}
	public void setID(int iD) {
		ID = iD;
	}
	public String getName() {
		return Name;
	}
	public void setName(String name) {
		Name = name;
	}
}


main:
public static void main(String args[]){
		Student st = new Student();
		st.setID(1);
		st.setName("SwineX");
		Session session = new Session();
		session.save(st);
	}


----the end----
分享到:
评论

相关推荐

    基于Java动态代理和反射机制实现ORM

    在Java中,基于动态代理和反射机制实现ORM可以提高代码的可维护性和灵活性。本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和...

    ORM技术的简单实现CRUD

    采用Java反射技术实现ORM技术,通过操作对象就可以操作数据库。 本例子采用Eclipse , Java 7.0 , apache DBCP, Spring 3.1等开源框架, 数据库JDBC 采用oracle jdbc. 文件分为两部分, 一部分是基于Eclipse 的ORM的...

    基于java 简易ORM 框架实现(二)

    在本篇“基于Java简易ORM框架实现(二)”中,我们将深入探讨如何构建一个简单的对象关系映射(Object-Relational Mapping,ORM)框架。ORM框架是Java开发中常用的一种技术,它允许开发者以面向对象的方式操作数据库,...

    自定义Orm框架的实现

    本项目旨在实现一个基于JDK5.0注解的小型ORM框架,模拟Hibernate的部分功能。 首先,我们要理解ORM的基本原理。ORM的核心思想是将数据库中的表映射为Java对象,将表中的记录映射为对象的实例,这样就可以通过操作...

    K-ORM 自定义ORM工具

    本文将详细探讨一个名为“K-ORM”的自定义ORM工具,该工具基于JDBC和Java反射机制实现,旨在提供简单易用的数据操作接口。 首先,我们要理解JDBC(Java Database Connectivity)在其中的角色。JDBC是Java平台上的...

    反射的应用 一个简单的ORM.rar

    本示例是一个基于C#语言的简单ORM实现,通过反射机制来实现这一功能。下面我们将详细探讨反射、ORM以及它们在这个简单应用中的运用。 **反射**是.NET Framework提供的一种强大特性,允许在运行时检查类型信息,包括...

    C#实现自己的ORM系列源码(MiniORM).rar

    然而,理解ORM的工作原理并亲手实现一个简单的ORM框架,对于提升开发者的数据库操作技能和对数据库设计的理解非常有帮助。 本资源“C#实现自己的ORM系列源码(MiniORM).rar”提供了这样一个学习和实践的机会。它包含...

    dotnet-基于Dapper的轻量级的高性能的简单的灵活的ORM框架

    “dotnet-基于Dapper的轻量级的高性能的简单的灵活的ORM框架”这个标题表明,我们讨论的是一个针对.NET平台的ORM(Object-Relational Mapping)框架,它基于Dapper库,并且具有轻量、高效、简单和灵活的特点。ORM...

    Asp.net中使用DapperExtensions和反射来实现一个通用搜索

    Dapper本身是一个高效的微 ORM 框架,它通过动态 SQL 和编译的表达式树来实现快速数据操作。而DapperExtensions在其基础上进一步提供了例如谓词系统(Predicate System)的高级查询功能,通过定义实体类和数据库表的...

    subsonic orm

    例如,"NorthWindWebApp"可能是一个使用Subsonic ORM的示例项目,它基于经典的Northwind数据库。在这个项目中,Subsonic会为Northwind数据库中的每个表生成对应的C#类,如Customers、Orders、Products等。开发者可以...

    ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG 4.3】

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序员开发量身定做的(ORM框架)代码生成工具,所生成的代码基于面向对象、分层架构、ORM,使用改进的抽象工厂设计模式及反射机制...

    JDBCSimpleORM:一个简单的jdbc封装的orm,用到注解+反射,使用maven构建的java工程

    **JDBCSimpleORM** 是一个基于Java的轻量级对象关系映射(ORM)框架,它使用了注解和反射技术,旨在简化数据库操作。ORM框架的主要目标是通过将对象模型与数据库模式关联起来,使得开发者可以用面向对象的方式来处理...

    ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG 4.2】 2011迎新版

    是一款专门为VB/C#.Net数据库程序员开发量身定做的(ORM框架)代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,使用改进的抽象工厂设计模式及反射机制等。目前直接支持...

    极简智能的AndroidOrm框架MiniOrm-For-Android.zip

    MiniOrm-for-android 是一款简单,只能,灵活的android ORM框架,完全基于对象进行操作。主要帮助android程序员的快速开发。通过反射将查询的数据智能的转换成 Entity 。省去开发人员手动解析的时间。 功能特点...

    支持多数据库的ORM框架ef-orm.zip

    例如:数据库查询条件的传入问题是所有ORM框架都不能回避的一个问题,所以我经常在想——既然我们可以用向DAO传入一个Entity来实现插入操作,为什么就不能用同样的方法来描述一个不以主键为条件的update/select/...

    pojoghost:基于反射的 POJO 转换器

    【标题】: "基于反射的 POJO 转换器" 在Java开发中,POJO(Plain Old Java Object)是一种简单、无特定约束的Java对象,通常用于数据封装和传输。"pojoghost"是一个项目,它提供了一个基于反射的POJO转换器,能够...

    JFinal极速WEB+ORM框架 v4.9.22.zip

    JFinal的设计理念基于“简单即高效”,其主要特点包括: 1. **无容器依赖**:JFinal不需要应用服务器,可以直接运行在Tomcat、Jetty等Servlet容器中,这大大降低了部署的复杂性。 2. **零配置**:JFinal通过注解和...

    Android-DBFlow-一个速度极快功能强大而且非常简单的Android数据库ORM库

    它基于 SQLite 数据库,允许开发者用 Java 或 Kotlin 语言编写数据库相关的代码,极大地简化了数据存储和检索的工作。在 Android 应用开发中,使用 ORM 框架能够减少与 SQL 直接交互的复杂性,提高开发效率,同时...

Global site tag (gtag.js) - Google Analytics