`

利用反射机制模拟Hibernate的Session

阅读更多
Java代码 复制代码 收藏代码
  1. package com.quan.hibernate.model;   
  2.   
  3. import java.lang.reflect.Method;   
  4. import java.sql.Connection;   
  5. import java.sql.DriverManager;   
  6. import java.sql.PreparedStatement;   
  7. import java.sql.SQLException;   
  8. import java.util.HashMap;   
  9. import java.util.Map;   
  10.   
  11. /**  
  12.  * Session的模拟  
  13.  */  
  14. public class create {   
  15.   
  16.     String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=hibernate";   
  17.     String user = "sa";   
  18.     String password = "123";   
  19.        
  20.     String tableName = "_Student";   
  21.     Map<String,String> cfs = new HashMap<String, String>();   
  22.        
  23.     String[] methodNames;   
  24.        
  25.     public create() {   
  26.         cfs.put("_id""id");   
  27.         cfs.put("_name","name");   
  28.         cfs.put("_age""age");   
  29.         methodNames = new String[cfs.size()];   
  30.     }   
  31.        
  32.     public void save(Student s) throws Exception {   
  33.         String sql = createSQL();   
  34.         Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");   
  35.         Connection conn = DriverManager.getConnection(url, user, password);   
  36.         PreparedStatement ps = conn.prepareStatement(sql);   
  37.            
  38.         for(int i = 0; i<methodNames.length;i++) {   
  39.               Method m = s.getClass().getMethod(methodNames[i]);   
  40.               Class r= m.getReturnType();   
  41.               if(r.getName() == "java.lang.String") {   
  42.                   String returnValue = (String)m.invoke(s);   
  43.                   ps.setString(i+1, returnValue);   
  44.               }   
  45.               if(r.getName() == "int") {   
  46.                   Integer returnValue = (Integer)m.invoke(s);   
  47.                   ps.setInt(i+1, returnValue);   
  48.               }   
  49.         }   
  50.            
  51.         /*for(int i = 0; i<cfs.size(); i++) {  
  52.             ps.setXXX(s.getXXX);  
  53.         }*/  
  54.            
  55.         ps.executeUpdate();   
  56.         ps.close();   
  57.         conn.close();   
  58.     }   
  59.   
  60.     private String createSQL() {   
  61.        
  62.         String str1 = "";   
  63.         String str2 = "";   
  64.         int index = 0;   
  65.         for(String s : cfs.keySet()) {   
  66.             String v = cfs.get(s);   
  67.             v= Character.toUpperCase(v.charAt(0)) + v.substring(1);   
  68.             methodNames[index] = "get" + v;   
  69.             str1 += s + ",";   
  70.         }   
  71.         str1 = str1.substring(0, str1.length()-1);   
  72.            
  73.         for(int i = 0; i<cfs.size();i++) {   
  74.             str2 += "?,";   
  75.         }   
  76.         str2 = str2.substring(0, str2.length()-1);   
  77.            
  78.         String sql = "insert into "+tableName+"("+str1+")"+"valses ("+str2+")";   
  79.            
  80.         return sql;   
  81.     }   
  82. }  
分享到:
评论

相关推荐

    模拟Hibernate

    刚学习了hibernate,就简单模拟了hibernate中session的save(Object obj)方法。使用方法跟原版一样,同样需要写hibernate.cfg.xml和实体类的映射文件,通过dom4j读取配置文件的内容,再使用反射技术拼成动态的sql语句...

    hibernate基本知识点

    在深入理解Hibernate的工作机制时,可以通过模拟的方式重现其内部逻辑。以下是一个简化的示例,展示Hibernate如何将Java对象持久化到数据库中: 1. **SQL语句构建**:当调用`session.save()`时,Hibernate会根据...

    Hibernate5教程文档大纲

    - 使用反射技术为PreparedStatement的参数赋值。 - 执行SQL更新操作。 2. Hibernate简介: - Hibernate是一个开源的ORM框架,提供了对JDBC的轻量级封装,让开发者以对象编程的方式处理数据库操作。 - Hibernate...

    hibernate 3.3 jar包

    至于`lib`目录,通常包含了一系列Hibernate 3.3运行所需的依赖库,这些库涵盖了JDBC驱动、日志框架(如log4j)、XML解析器、反射增强工具等。例如,JDBC驱动用于与各种数据库进行通信,log4j提供日志记录服务,DOM4J...

    自定义Orm框架的实现

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

    小码哥Java学科的课程大纲.docx

    8. **反射机制**:解释反射的概念及其在运行时动态获取类信息的功能。 9. **新版本Java语言特性**:介绍Java新版本中的特性和改进点,如Lambda表达式、Stream API等。 #### 四、JavaEE中的数据存储 1. **XML**:...

    2018阿里Java面试题70道

    20. **虚拟主机**:在一台物理服务器上模拟多个独立的服务器环境,提高硬件利用率。 21. **Java虚拟机(JVM)**:Java程序的运行环境,负责类加载、运行字节码、内存管理等。 22. **JVM生命周期与体系结构**:包括...

    spring框架学习

    - **Spring+Hibernate如何使用Session、Query等对象**:在Spring配置文件中定义SessionFactory,然后在DAO层中通过@Autowired等方式获取Session对象,进行数据库操作。 - **Spring框架和Struts2整合应用**:Spring...

    Java学习笔记-个人整理的

    {3.3}String常量重利用}{70}{section.3.3} {3.4}正则表达式}{71}{section.3.4} {3.5}StringBuffer}{75}{section.3.5} {3.6}StringBuilder}{76}{section.3.6} {3.7}StringBuilder与StringBuffer的缺点}{76}{...

    java面试题大全.pdf

    - **NIO (Non-blocking I/O)**: 同步非阻塞I/O模型,使用单线程或多线程来管理多个连接,利用选择器(selector)机制来检查多个通道(channel)的状态,从而减少线程的开销。 - **AIO (Asynchronous I/O)**: 异步非...

    手写高仿真提炼Spring.zip

    最后,模拟Spring的实现将帮助我们理解Spring的内部工作原理,比如如何通过反射创建bean,如何解析和加载bean的配置信息,以及如何实现AOP的动态代理等。这种实践过程不仅加深了对Spring的理解,也为日常开发中的...

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

    最大限度利用编译器减少编码错误的可能性 API设计和元数据模型(meta-model)的使用,使得常规的数据库查询都可以直接通过Criteria API来完成,无需使用任何JPQL/HQL/SQL。可以让避免用户犯一些语法、拼写等错误。...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **准备策略**:提前准备并模拟面试场景。 ### 腾讯面试/阿里面试 - **面试流程**:包括技术面试、HR面试等环节。 - **面试技巧**:强调团队合作和个人成就。 ### 安卓签到精灵app - **功能**:实现自动签到。 ...

Global site tag (gtag.js) - Google Analytics