`

hibernate 模拟实现

阅读更多
StuentTest.java

import com.hugui.hibernate.model.Student;

public class StudentTest {

	public static void main(String []args) throws Exception{
		Student s = new Student();
		s.setId(3);
		s.setName("s3");
		s.setAge(23);

		Session session = new Session();

		session.save(s);
		
	}
	
}



Student.java
package com.hugui.hibernate.model;

public class Student {

	private int id;
	
	private String name;
	
	private int age;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}



Session.java
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.Map;

import com.hugui.hibernate.model.Student;

public class Session {

	String tableName = "_Student";
	Map<String, String> cfs = new HashMap<String, String>();

	String [] methodNames = null;
	
	public Session() {
		cfs.put("_id", "id");
		cfs.put("_name", "name");
		cfs.put("_age", "age");
		
		methodNames = new String[cfs.size()];
	}

	public void save(Student s) throws Exception {
		String sql = createSQL();
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/hibernate","root","root");
			PreparedStatement pstmt = conn.prepareStatement(sql);
			//设置
			for(int i=0; i<methodNames.length; i++){
				//利用反射拿到方法
				Method m = s.getClass().getMethod(methodNames[i]);
				Class r = m.getReturnType();	
				if(r.getName().equals("java.lang.String")){
					String returnValue = (String)m.invoke(s);
					pstmt.setString(i+1, returnValue);
				}
				if(r.getName().equals("int")){
					int returnValue = (Integer)m.invoke(s);
					pstmt.setInt(i+1, returnValue);
				}
				System.out.println(m.getName() + "|" + r.getName());
			}
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
			
	}

	private String createSQL() {
		String str1 = "";
		int index = 0;
		for(String s: cfs.keySet()){
			String v = cfs.get(s);
			v = Character.toUpperCase(v.charAt(0)) + v.substring(1,v.length());
			methodNames[index++] = "get" +  v;
			str1 += s + ",";
		}
		str1 = str1.substring(0, str1.length()-1);
		System.out.println(str1);
		
		String str2 = "";
		for(int i=0; i<cfs.size(); i++){
			str2  += "?,";
		}
		str2 = str2.substring(0, str2.length()-1);
		System.out.println(str2);
		
		String sql = "insert into " + tableName + "("+str1+")" + "values(" + str2 + ")";
		
		System.out.println(sql);
		return sql;
		
	}

}

分享到:
评论

相关推荐

    Hibernate模拟

    在本项目中,你可以看到一个简单的Hibernate模拟实现,包括配置文件的设置、实体类的定义、映射文件的编写以及基本的CRUD操作。例如,可能有一个名为`User`的实体类,对应数据库的`users`表。通过`hibernate.cfg.xml...

    Hibernate实现原理模拟

    **Hibernate实现原理...通过模拟实现,我们可以更直观地理解其工作流程,加深对ORM框架的理解。这不仅有助于日常开发,也有利于提升解决问题的能力。在学习和实践中,不断探索和优化,将使你成为更优秀的Java开发者。

    java模拟hibernate实现

    4. **自动建表删表**: 模拟Hibernate的一个关键点是实现数据库表的动态创建和删除。这通常通过分析实体类及其属性来生成相应的CREATE TABLE和DROP TABLE SQL语句,然后使用JDBC执行这些语句。 5. **实体关系映射(E-...

    hibernate资料3

    首先,"006_尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate模拟实现.avi"这个视频,马士兵老师将带你走进Hibernate的世界,讲解如何模拟实现Hibernate的基本功能。这个阶段的学习旨在理解Hibernate的核心概念...

    基于struts+hibernate的模拟银行转账

    在这个模拟项目中,虽然可能并未涵盖所有这些高级特性,但通过Struts1和Hibernate的整合,可以学习到如何在实际的Web环境中实现用户交互、数据库操作以及错误处理,为构建更复杂的网上银行系统打下基础。 在EBank...

    struts2整合hibernate的网上银行模拟项目

    这个“struts2整合hibernate的网上银行模拟项目”结合了这两个框架,创建了一个模拟的网上银行系统,旨在展示如何在实际项目中使用它们。 首先,让我们深入了解一下Struts2。Struts2 是 Struts 的下一代,它继承了...

    看我山寨版 hibernate 简单实现 一

    读者可以通过查看这些源代码,了解作者如何模拟 Hibernate 的核心功能,如 Session 接口、实体管理、SQL 查询的自动化生成等。 综上所述,这篇文章的内容可能包括以下几个方面: 1. **数据库连接管理**:介绍如何...

    控制反转应用,模拟Hibernate

    在标题"控制反转应用,模拟Hibernate"中,我们讨论的是如何使用Java编程来模拟Hibernate中的IoC概念。Hibernate是一个流行的对象关系映射(ORM)框架,它在处理数据库操作时,利用IoC来管理对象的生命周期和依赖关系...

    模拟hibernate的session.save()功能

    在这个"模拟hibernate的session.save()功能"的资源中,我们将深入理解Hibernate的核心操作之一:持久化对象。此程序源码的目的是帮助我们理解如何在没有Hibernate库的情况下实现类似的功能,这有助于我们更好地掌握...

    hibernate注解功能模拟

    模拟实现Hibernate的注解功能原理,需要深入了解Java的反射API,如Class类、Field类、Method类等,以及如何通过它们来读取和使用注解。首先,你需要定义自己的自定义注解,这些注解将模仿Hibernate的标准注解,如@...

    hibernate模拟hibernatetemplate

    我们也可以在模拟类中实现这一功能,将Hibernate的异常捕获并抛出更易于理解和处理的自定义异常。 6. **查询支持**:除了基本的CRUD操作,还可以添加支持HQL(Hibernate查询语言)和SQL查询的方法,如`...

    基于Struts2+Hibernate5的教务管理系统项目实训

    本项目只是简单模拟教务管理系统的基本功能,通过熟悉的教务管理系统开发来综合训练Struts2和 Hibernate5框架技术的整合应用,并进一步提高项目实践能力。 项目实现的功能包括学生管理部分,教师管理部分和管理员管理...

    Hibernate悲观锁和乐观锁的实现

    在进行Hibernate的测试时,可以创建一个名为`hibernate_test`的项目,编写对应的实体类、映射文件以及测试用例,模拟并发场景,来深入理解并对比悲观锁和乐观锁的差异和效果。 总之,理解并合理运用悲观锁和乐观锁...

    hibernate example

    3. **测试代码**:编写JUnit测试用例,模拟用户增删改查的完整流程,检查Hibernate功能是否正常工作。 压缩包中的“.files”文件夹可能包含了相关的图片、配置文件或日志,它们是教程中的辅助材料,帮助理解每个...

    Hibernate连接数据库模拟

    在这个“Hibernate连接数据库模拟”项目中,我们将会深入探讨如何使用Java DOM解析XML配置文件来实现Hibernate的数据访问。 首先,Hibernate的核心在于它的配置文件——`hibernate.cfg.xml`,这个文件包含了数据库...

    使用Struts + Spring + Hibernate完成用户登陆笔记

    * 然后,使用Hibernate框架来实现数据持久化,例如使用Hibernate的createQuery方法来实现数据查询。 * 使用Struts框架来处理HTTP请求和响应,例如使用Struts的ActionMapping来实现请求映射。 * 使用Spring框架来实现...

    SpringAOP整合Hibernate并使用事务(模拟买书的过程)

    在本示例中,我们将探讨如何整合Spring AOP(面向切面编程)与Hibernate ORM框架,并利用它们来实现事务管理,模拟一个简单的买书过程。这个过程将涉及到数据库操作,事务的开始、提交和回滚,以及AOP在处理事务中的...

    模拟hibernate注解功能

    在这个名为“模拟hibernate注解功能”的项目中,我们将探讨如何利用自定义注解和反射技术来模仿Hibernate的注解功能。 首先,让我们理解一下Hibernate的注解。Hibernate支持JPA(Java Persistence API)标准,其中...

    自定义 Hibernate Tools 的模板

    通过自定义模板,我们可以控制生成的代码结构、命名规范,甚至引入额外的功能,以实现与现有项目代码风格的一致性。 【标签】:“源码”、“工具” 自定义模板涉及到对模板引擎的理解,通常使用的是Velocity或...

    模拟hibernate中一级缓存

    在提供的"模拟hibernate中一级缓存"的案例中,我们可以创建一个简单的实体类,例如`User`,并使用Hibernate的Session接口进行操作。首先,通过`Session.get()`方法加载一个User对象,然后关闭Session。接着,再次...

Global site tag (gtag.js) - Google Analytics