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模拟实现,包括配置文件的设置、实体类的定义、映射文件的编写以及基本的CRUD操作。例如,可能有一个名为`User`的实体类,对应数据库的`users`表。通过`hibernate.cfg.xml...
**Hibernate实现原理...通过模拟实现,我们可以更直观地理解其工作流程,加深对ORM框架的理解。这不仅有助于日常开发,也有利于提升解决问题的能力。在学习和实践中,不断探索和优化,将使你成为更优秀的Java开发者。
4. **自动建表删表**: 模拟Hibernate的一个关键点是实现数据库表的动态创建和删除。这通常通过分析实体类及其属性来生成相应的CREATE TABLE和DROP TABLE SQL语句,然后使用JDBC执行这些语句。 5. **实体关系映射(E-...
首先,"006_尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate模拟实现.avi"这个视频,马士兵老师将带你走进Hibernate的世界,讲解如何模拟实现Hibernate的基本功能。这个阶段的学习旨在理解Hibernate的核心概念...
在这个模拟项目中,虽然可能并未涵盖所有这些高级特性,但通过Struts1和Hibernate的整合,可以学习到如何在实际的Web环境中实现用户交互、数据库操作以及错误处理,为构建更复杂的网上银行系统打下基础。 在EBank...
这个“struts2整合hibernate的网上银行模拟项目”结合了这两个框架,创建了一个模拟的网上银行系统,旨在展示如何在实际项目中使用它们。 首先,让我们深入了解一下Struts2。Struts2 是 Struts 的下一代,它继承了...
读者可以通过查看这些源代码,了解作者如何模拟 Hibernate 的核心功能,如 Session 接口、实体管理、SQL 查询的自动化生成等。 综上所述,这篇文章的内容可能包括以下几个方面: 1. **数据库连接管理**:介绍如何...
在标题"控制反转应用,模拟Hibernate"中,我们讨论的是如何使用Java编程来模拟Hibernate中的IoC概念。Hibernate是一个流行的对象关系映射(ORM)框架,它在处理数据库操作时,利用IoC来管理对象的生命周期和依赖关系...
在这个"模拟hibernate的session.save()功能"的资源中,我们将深入理解Hibernate的核心操作之一:持久化对象。此程序源码的目的是帮助我们理解如何在没有Hibernate库的情况下实现类似的功能,这有助于我们更好地掌握...
模拟实现Hibernate的注解功能原理,需要深入了解Java的反射API,如Class类、Field类、Method类等,以及如何通过它们来读取和使用注解。首先,你需要定义自己的自定义注解,这些注解将模仿Hibernate的标准注解,如@...
我们也可以在模拟类中实现这一功能,将Hibernate的异常捕获并抛出更易于理解和处理的自定义异常。 6. **查询支持**:除了基本的CRUD操作,还可以添加支持HQL(Hibernate查询语言)和SQL查询的方法,如`...
本项目只是简单模拟教务管理系统的基本功能,通过熟悉的教务管理系统开发来综合训练Struts2和 Hibernate5框架技术的整合应用,并进一步提高项目实践能力。 项目实现的功能包括学生管理部分,教师管理部分和管理员管理...
在进行Hibernate的测试时,可以创建一个名为`hibernate_test`的项目,编写对应的实体类、映射文件以及测试用例,模拟并发场景,来深入理解并对比悲观锁和乐观锁的差异和效果。 总之,理解并合理运用悲观锁和乐观锁...
3. **测试代码**:编写JUnit测试用例,模拟用户增删改查的完整流程,检查Hibernate功能是否正常工作。 压缩包中的“.files”文件夹可能包含了相关的图片、配置文件或日志,它们是教程中的辅助材料,帮助理解每个...
在这个“Hibernate连接数据库模拟”项目中,我们将会深入探讨如何使用Java DOM解析XML配置文件来实现Hibernate的数据访问。 首先,Hibernate的核心在于它的配置文件——`hibernate.cfg.xml`,这个文件包含了数据库...
* 然后,使用Hibernate框架来实现数据持久化,例如使用Hibernate的createQuery方法来实现数据查询。 * 使用Struts框架来处理HTTP请求和响应,例如使用Struts的ActionMapping来实现请求映射。 * 使用Spring框架来实现...
在本示例中,我们将探讨如何整合Spring AOP(面向切面编程)与Hibernate ORM框架,并利用它们来实现事务管理,模拟一个简单的买书过程。这个过程将涉及到数据库操作,事务的开始、提交和回滚,以及AOP在处理事务中的...
在这个名为“模拟hibernate注解功能”的项目中,我们将探讨如何利用自定义注解和反射技术来模仿Hibernate的注解功能。 首先,让我们理解一下Hibernate的注解。Hibernate支持JPA(Java Persistence API)标准,其中...
通过自定义模板,我们可以控制生成的代码结构、命名规范,甚至引入额外的功能,以实现与现有项目代码风格的一致性。 【标签】:“源码”、“工具” 自定义模板涉及到对模板引擎的理解,通常使用的是Velocity或...
在提供的"模拟hibernate中一级缓存"的案例中,我们可以创建一个简单的实体类,例如`User`,并使用Hibernate的Session接口进行操作。首先,通过`Session.get()`方法加载一个User对象,然后关闭Session。接着,再次...