(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操作的基本步骤包括加载驱动、建立连接、创建Statement或PreparedStatement对象、执行SQL...
`ResultSetWithPageImpl`作为`ResultSetWithPage`的实现类,包装了一个真实的`ResultSet`对象,以保持原始数据。所有从`ResultSet`继承的方法都转发到内部的`ResultSet`实例。`ResultSetWithPageImpl`的核心任务是...
最后,要注意的是,虽然这个简单的JDBC demo展示了基础的数据库操作,但在实际项目中,通常会使用ORM框架(如Hibernate、MyBatis)来简化数据库操作,提高开发效率和代码可维护性。同时,为了更好地管理和优化数据库...
3. JDBC抽象:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,它们是对JDBC的简单包装,降低了SQL操作的复杂性,提高了可读性和可维护性。 4. MyBatis集成:对于偏好XML或注解方式配置SQL的开发者,Spring...
轻量级JDBC封装类的目标是简化上述流程,提供更简洁、易用的API,同时保持灵活性,以便在不依赖大型ORM框架(如MyBatis或Hibernate)的情况下操作数据库。这样的封装通常会包含以下功能: 1. 数据源管理:封装类...
封装JDBC的基本思路是将数据库连接、SQL执行和资源关闭等操作包装在独立的类或方法中,使得在实际开发中,开发者只需关注业务逻辑,无需关心底层的数据库操作细节。这种封装有助于减少重复代码,提高代码质量,同时...
此外,`Autoboxing`和`Unboxing`特性使得在原始类型和包装类之间自动转换变得简单。 3. **输入输出(I/O)**: Java的`java.io`包提供了丰富的类和接口来处理输入和输出。基本的流分为字节流(`InputStream`和`...
另一件事是,我希望控制JDBC包装程序,以便以简单的方式实现自动重新连接功能(如果由于某种原因而断开连接)。 我终于决定制作一个适合我需求的ORM,就在这里。 文献资料 版本2完全稳定后,将立即发布版本2的文档...
通过定制 JDBC 协议实现可以让开发小伙伴们不必关心分库分表的实现,让分库分表在 JDBC 的内部实现类,对业务保持透明。通过定制 ORM 框架实现可以把分片规则实现到了 ORM 框架中或者通过 ORM 框架支持的扩展机制来...
2. 数据访问/集成:涉及JDBC、ORM、OXM和IMS,支持数据库交互。 3. Web:包括Web、Web-Servlet、Web-WebSocket、Web-Portlet等模块,用于构建Web应用。 4. Instrumentation:支持类检测和类加载器实现。 5. Test:...
2. **数据访问/集成**:涵盖 JDBC、ORM、OXM、JMS 和事务管理。 3. **Web**:支持 Web 应用开发,包括 Web、Servlet、WebSocket 和 Web-Portlet 模块。 4. **AOP**:支持面向切面编程。 5. **Instrumentation**:...
它封装了JDBC繁琐的代码,使得数据库操作更加简单和易用。 `spring-messaging-4.3.10.RELEASE.jar`是Spring的消息处理模块,主要用于处理消息驱动的应用场景,如AMQP、STOMP等协议,提供了统一的消息编程模型。 总...
如果是查询,返回单个对象、对象集合或者基本类型的包装类。 基础知识点涵盖以下几个方面: 1) SqlMapClient:它是Ibatis的核心接口,负责执行SQL映射和批量处理。提供了多种方法,如queryForObject,用于根据ID...
通常可以通过底层的数据访问层(例如JDBC或ORM框架)来实现事务处理。 - **初始化**: ```java Workflow wf = new BasicWorkflow(username); ``` 其中`username`用于关联当前请求的用户。 - **EJBWorkflow**:...
- DAO实现类实现了接口中的方法,负责具体的数据库操作,通常使用JDBC或ORM框架如Hibernate、MyBatis来实现。 3. **业务层(Service Layer)**: - 业务层又称为服务层,它调用多个DAO操作来完成整体的业务流程。...
- 可能还包含了数据库操作的封装,例如DAO层的通用方法,对JDBC或者ORM框架(如Hibernate、MyBatis)的进一步包装,使数据访问更加便捷。 2. **MVC模式支持**: - exit-web-framework可能实现了模型-视图-控制器...
至于java.jdbc,它是Clojure对Java的JDBC API的直接包装,提供了低级的访问方式,适合那些希望有更多控制权的开发者。使用java.jdbc,我们可以通过以下方式建立连接并执行查询: ```clojure (require '[clojure....
数据库连接池(Database Connection Pool)是Java开发中用于管理数据库连接的一种技术,它在系统启动时预先创建并维护一定数量...而DBUtils虽然简单易用,但在大型项目中可能需要更强大的ORM框架如MyBatis或Hibernate。