`
chenshengzun
  • 浏览: 115296 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简单jdbc包装orm类

    博客分类:
  • Java
 
阅读更多
(1)首先创建一个pojo对象

package org.hibernate.reflect.util;

import java.util.HashMap;
import java.util.Map;

public class Student {
public static String tableName = "student";

private int id;

private int age;

private String name;

public Student() {
  super();
}

public Student(int id, int age, String name) {
  super();
  this.id = id;
  this.age = age;
  this.name = name;
}

public int getId() {
  return id;
}

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

public int getAge() {
  return age;
}

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

public String getName() {
  return name;
}

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

public Map<String,String> getField(){
  Map<String,String> params = new HashMap<String, String>();
  params.put("id", "id");
  params.put("age", "age");
  params.put("name", "name");
  return params;
}
}
(2)创建获取jdbc链接的类

package org.hibernate.reflect.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Connector {
public static Connection getConnection(){
  Connection conn = null;
  try {
   Class.forName("com.mysql.jdbc.Driver");
   conn = DriverManager.getConnection("jdbc:mysql://192.168.74.10:3306/fastknow_lady","fastknow_lady","fastknow_lady");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return conn;
}
}
(3)模拟hibernate类

package org.hibernate.reflect.util;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;


public class HibernateTemplate<T> {

String[] methodNames;

public HibernateTemplate(){
}

public String complieSQL(Student s){
  methodNames = new String[s.getField().size()];
 
  String value = "";
  String name = "";
  int index = 0;
 
  for(String key : s.getField().keySet()){
   String m = s.getField().get(key);
   methodNames[index++] = "get" + Character.toUpperCase(m.charAt(0)) + m.substring(1);
   name += key + ",";
  }
 
  for(int i=0;i<s.getField().size();i++){
   value += "?,";
  }
  name = name.substring(0,name.length()-1);
  value = value.substring(0,value.length()-1);
  String sql = "insert " + s.tableName + "(" + name + ") values(" + value + ")";
  return sql;
}

public void save(Student s){
  String sql = complieSQL(s);
  try {
   Connection conn = Connector.getConnection();
   PreparedStatement ps = conn.prepareStatement(sql);
   for(int i=0;i<methodNames.length;i++){
   
    Method m = s.getClass().getMethod(methodNames[i]);
    Class returnType = m.getReturnType();
   
    if(returnType.getName().equals("int")){
     Integer returnValue = (Integer)m.invoke(s);
     ps.setInt(i+1, returnValue);
    }else if(returnType.getName().equals("java.lang.String")){
     String returnValue = (String)m.invoke(s);
     ps.setString(i+1, returnValue);
    }
   }
   int rs = ps.executeUpdate();
   conn.commit();
   System.out.println("the effect result set " + rs);
   ps.close();
   conn.close();
  
  } catch (Exception e) {
   e.printStackTrace();
  }
}
}
(4)创建测试类

package org.hibernate.reflect.util;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;


public class HibernateTemplate<T> {

String[] methodNames;

public HibernateTemplate(){
}

public String complieSQL(Student s){
  methodNames = new String[s.getField().size()];
 
  String value = "";
  String name = "";
  int index = 0;
 
  for(String key : s.getField().keySet()){
   String m = s.getField().get(key);
   methodNames[index++] = "get" + Character.toUpperCase(m.charAt(0)) + m.substring(1);
   name += key + ",";
  }
 
  for(int i=0;i<s.getField().size();i++){
   value += "?,";
  }
  name = name.substring(0,name.length()-1);
  value = value.substring(0,value.length()-1);
  String sql = "insert " + s.tableName + "(" + name + ") values(" + value + ")";

System.out.println("hibernate : " + sql);
  return sql;
}

public void save(Student s){
  String sql = complieSQL(s);
  try {
   Connection conn = Connector.getConnection();
   PreparedStatement ps = conn.prepareStatement(sql);
   for(int i=0;i<methodNames.length;i++){
   
    Method m = s.getClass().getMethod(methodNames[i]);
    Class returnType = m.getReturnType();
   
    if(returnType.getName().equals("int")){
     Integer returnValue = (Integer)m.invoke(s);
     ps.setInt(i+1, returnValue);
    }else if(returnType.getName().equals("java.lang.String")){
     String returnValue = (String)m.invoke(s);
     ps.setString(i+1, returnValue);
    }
   }
   int rs = ps.executeUpdate();
   conn.commit();
   System.out.println("the effect result set " + rs);
   ps.close();
   conn.close();
  
  } catch (Exception e) {
   e.printStackTrace();
  }
}
}
测试结果

hibernate : insert student(id,name,age) values(?,?,?)
the effect result set 1
分享到:
评论

相关推荐

    jdbc操作基本操作包装 实现简单的OR映射 外加爬虫

    本文将深入探讨JDBC的基本操作、包装机制以及如何实现简单的对象关系(OR)映射,同时也会提及外加的爬虫技术。 首先,JDBC操作的基本步骤包括加载驱动、建立连接、创建Statement或PreparedStatement对象、执行SQL...

    JDBC简单分页方案

    `ResultSetWithPageImpl`作为`ResultSetWithPage`的实现类,包装了一个真实的`ResultSet`对象,以保持原始数据。所有从`ResultSet`继承的方法都转发到内部的`ResultSet`实例。`ResultSetWithPageImpl`的核心任务是...

    JDBC的简单demo

    最后,要注意的是,虽然这个简单的JDBC demo展示了基础的数据库操作,但在实际项目中,通常会使用ORM框架(如Hibernate、MyBatis)来简化数据库操作,提高开发效率和代码可维护性。同时,为了更好地管理和优化数据库...

    org.springframework.orm.jar.zip

    3. JDBC抽象:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,它们是对JDBC的简单包装,降低了SQL操作的复杂性,提高了可读性和可维护性。 4. MyBatis集成:对于偏好XML或注解方式配置SQL的开发者,Spring...

    轻量级封装jdbc 实现增删改查

    轻量级JDBC封装类的目标是简化上述流程,提供更简洁、易用的API,同时保持灵活性,以便在不依赖大型ORM框架(如MyBatis或Hibernate)的情况下操作数据库。这样的封装通常会包含以下功能: 1. 数据源管理:封装类...

    java的jdbc简单封装方法

    封装JDBC的基本思路是将数据库连接、SQL执行和资源关闭等操作包装在独立的类或方法中,使得在实际开发中,开发者只需关注业务逻辑,无需关心底层的数据库操作细节。这种封装有助于减少重复代码,提高代码质量,同时...

    Java基础类

    此外,`Autoboxing`和`Unboxing`特性使得在原始类型和包装类之间自动转换变得简单。 3. **输入输出(I/O)**: Java的`java.io`包提供了丰富的类和接口来处理输入和输出。基本的流分为字节流(`InputStream`和`...

    ORM:JavaWebStack的对象关系映射框架(以前的AJORM)

    另一件事是,我希望控制JDBC包装程序,以便以简单的方式实现自动重新连接功能(如果由于某种原因而断开连接)。 我终于决定制作一个适合我需求的ORM,就在这里。 文献资料 版本2完全稳定后,将立即发布版本2的文档...

    数据库表拆分的三种解决方案.docx

    通过定制 JDBC 协议实现可以让开发小伙伴们不必关心分库分表的实现,让分库分表在 JDBC 的内部实现类,对业务保持透明。通过定制 ORM 框架实现可以把分片规则实现到了 ORM 框架中或者通过 ORM 框架支持的扩展机制来...

    Spring 30道面试题和答案.docx

    2. 数据访问/集成:涉及JDBC、ORM、OXM和IMS,支持数据库交互。 3. Web:包括Web、Web-Servlet、Web-WebSocket、Web-Portlet等模块,用于构建Web应用。 4. Instrumentation:支持类检测和类加载器实现。 5. Test:...

    Spring 55道面试题和答案.docx

    2. **数据访问/集成**:涵盖 JDBC、ORM、OXM、JMS 和事务管理。 3. **Web**:支持 Web 应用开发,包括 Web、Servlet、WebSocket 和 Web-Portlet 模块。 4. **AOP**:支持面向切面编程。 5. **Instrumentation**:...

    spring4.3.10的所有jar包

    它封装了JDBC繁琐的代码,使得数据库操作更加简单和易用。 `spring-messaging-4.3.10.RELEASE.jar`是Spring的消息处理模块,主要用于处理消息驱动的应用场景,如AMQP、STOMP等协议,提供了统一的消息编程模型。 总...

    Ibatis入门资料(PPT)

    如果是查询,返回单个对象、对象集合或者基本类型的包装类。 基础知识点涵盖以下几个方面: 1) SqlMapClient:它是Ibatis的核心接口,负责执行SQL映射和批量处理。提供了多种方法,如queryForObject,用于根据ID...

    osworkflow简单教程

    通常可以通过底层的数据访问层(例如JDBC或ORM框架)来实现事务处理。 - **初始化**: ```java Workflow wf = new BasicWorkflow(username); ``` 其中`username`用于关联当前请求的用户。 - **EJBWorkflow**:...

    java-DAO分层解析.pdf

    - DAO实现类实现了接口中的方法,负责具体的数据库操作,通常使用JDBC或ORM框架如Hibernate、MyBatis来实现。 3. **业务层(Service Layer)**: - 业务层又称为服务层,它调用多个DAO操作来完成整体的业务流程。...

    exit-web-framework是对常用的java web开发封装实用功能来提高开发效率.zip

    - 可能还包含了数据库操作的封装,例如DAO层的通用方法,对JDBC或者ORM框架(如Hibernate、MyBatis)的进一步包装,使数据访问更加便捷。 2. **MVC模式支持**: - exit-web-framework可能实现了模型-视图-控制器...

    clojure for mysql.zip

    至于java.jdbc,它是Clojure对Java的JDBC API的直接包装,提供了低级的访问方式,适合那些希望有更多控制权的开发者。使用java.jdbc,我们可以通过以下方式建立连接并执行查询: ```clojure (require '[clojure....

    dbcp,dbutils

    数据库连接池(Database Connection Pool)是Java开发中用于管理数据库连接的一种技术,它在系统启动时预先创建并维护一定数量...而DBUtils虽然简单易用,但在大型项目中可能需要更强大的ORM框架如MyBatis或Hibernate。

Global site tag (gtag.js) - Google Analytics