`
liuyiyou
  • 浏览: 23701 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

模拟hibernate,实现了增删改查以及按id查询

阅读更多
模拟hibernate,实现了增删改查以及按id查询
public class PrePareSql {

	public static String selectSql(Class<?> obj) {
		String sql = "select ";
		Field[] fields = obj.getDeclaredFields();

		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " ,";
			} else {
				sql = sql + fields[i].getName() + " from  ";
			}
		}
		String tableName = getTableName(obj);
		sql = sql + tableName;
		System.out.println(sql);
		return sql;
	}
	
	public static String selectSql(Class<?> obj,String id) {
		String sql = "select ";
		Field[] fields = obj.getDeclaredFields();

		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " ,";
			} else {
				sql = sql + fields[i].getName() + " from  ";
			}
		}
		
		
		String tableName = getTableName(obj) + " where " + fields[0].getName() +" =  ?";
		sql = sql + tableName;
		System.out.println(sql);
		return sql;
	}

	public static String insertSql(Class<?> obj) {
		
		String sql = "insert into  " + getTableName(obj) +" ( ";
		Field[] fields = obj.getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " ,";
			} else {
				sql = sql + fields[i].getName() + " )  "+"values( ";
			}
		}
		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql=sql+"?,";
			}else{
				sql=sql+"? )";
			}
		}
		
		System.out.println(sql);
		return sql;
	}
	
	public static String deleteSql(Class<?> obj){
		String sql = "delete from " + getTableName(obj)+" where ";
		Field[] fields = obj.getDeclaredFields();
		
		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " = ? and ";
			} else {
				sql = sql + fields[i].getName()+" = ? ";
			}
		}
		
		
		
	   
		System.out.println(sql);
		return sql;
	}
	
	public static String updateSql(Class<?> obj){
		//UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 
		//UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
		String sql = "update " +getTableName(obj) +" set "; 
		Field[] fields = obj.getDeclaredFields();
		
		for (int i = 1; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " = ? , ";
			} else {
				sql = sql + fields[i].getName()+" = ?  where ";
			}
		}
		sql=sql+ fields[0].getName() +" = ?";
		System.out.println(sql);
		return sql;
	}

	public static String getTableName(Class<?> obj) {

		String className = obj.getName();
		int index = className.lastIndexOf(".");
		String realClassName = className.substring(index + 1);
		return realClassName;
	}
	

	
	public static void main(String[] args) {
		PrePareSql.selectSql(UserInfo.class,"liu");
		PrePareSql.insertSql(UserInfo.class);
		PrePareSql.deleteSql(UserInfo.class);
		PrePareSql.updateSql(UserInfo.class);
		
	}
}

//这个是工具类
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ConnectionUtil {

	private Connection conn;
	private String sql;
	private List params;

	public void setConn(Connection conn) {
		this.conn = conn;
	}

	public void setSql(String sql) {
		this.sql = sql;
	}

	public void setParams(List params) {
		this.params = params;
	}

	public Connection getConnection() {
		Connection conn = null;

		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost/test",
					"root", "root");
		} catch (SQLException e) {

			e.printStackTrace();
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
		return conn;
	}

	public List executeQuery(Class<?> entityClass) {
		ResultSet rs = null;

		List list = new ArrayList();
		try {
			setSql(PrePareSql.selectSql(entityClass));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
//			setParams(pstmt);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				// System.out.println(rs.getString(1) + "\t" + rs.getString(2));
				Object newInstance = wrap(entityClass, rs);
				list.add(newInstance);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}

	// getOne
	public Object executeQuery(Class<?> entityClass, String id) {
		// Class<?> entityClass = entity.getClass();
		ResultSet rs = null;
		Object newInstance = null;
		setSql(PrePareSql.selectSql(entityClass, id));
		try {
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				// System.out.println(rs.getString(1) + "\t" + rs.getString(2));
				newInstance = wrap(entityClass, rs);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return newInstance;
	}

	public void save(Object entity) {

		Class<?> entityClass = entity.getClass();
		Field[] fileds = entityClass.getDeclaredFields();
		ArrayList arrayList = new ArrayList();
		try {
			for (Field f : fileds) {
				String getMethodName = "get"
						+ f.getName().substring(0, 1).toUpperCase()
						+ f.getName().substring(1);
				Method getMethod = entityClass.getMethod(getMethodName,
						new Class[] {});
				// System.out.println(setMethod);
				Object obj = getMethod.invoke(entity, new Object[] {});
				arrayList.add(obj);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {

			setSql(PrePareSql.insertSql(entityClass));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			setParams(arrayList);
			setParams(pstmt);
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public void update(Object entity) {

		Class<?> entityClass = entity.getClass();
		Field[] fileds = entityClass.getDeclaredFields();
		ArrayList arrayList = new ArrayList();
		try {
			for (int i = 1; i < fileds.length; i++) {
				String getMethodName = "get"
						+ fileds[i].getName().substring(0, 1).toUpperCase()
						+ fileds[i].getName().substring(1);
				Method getMethod = entityClass.getMethod(getMethodName,
						new Class[] {});
				System.out.println(getMethod);
				Object obj = getMethod.invoke(entity, new Object[] {});
				arrayList.add(obj);
			}
			String getMethodName = "get"
					+ fileds[0].getName().substring(0, 1).toUpperCase()
					+ fileds[0].getName().substring(1);
			Method getMethod = entityClass.getMethod(getMethodName,
					new Class[] {});
			System.out.println(getMethod);
			Object obj = getMethod.invoke(entity, new Object[] {});
			arrayList.add(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}

		for (int i = 0; i < arrayList.size(); i++) {
			System.out.println("array:   " + arrayList.get(i));
		}

		try {

			setSql(PrePareSql.updateSql(entityClass));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			setParams(arrayList);
			setParams(pstmt);
			pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public Object wrap(Class<?> entityClass, ResultSet rs) {
		Object obj2 = null;
		try {
			obj2 = entityClass.newInstance();
		} catch (InstantiationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		Field[] fileds = entityClass.getDeclaredFields();

		try {

			for (Field f : fileds) {
				String setMethodName = "set"
						+ f.getName().substring(0, 1).toUpperCase()
						+ f.getName().substring(1);
				Method setMethod = entityClass.getMethod(setMethodName,
						new Class[] { f.getType() });
				Object obj = rs.getObject(f.getName());
				setMethod.invoke(obj2, new Object[] { obj });

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return obj2;

	}


	private void setParams(PreparedStatement pstmt) {
		if (this.params == null || this.params.size() == 0) {
			return;
		}
		try {
			for (int i = 0; i < this.params.size(); i++) {
				pstmt.setObject(i + 1, this.params.get(i));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void delete(Object entity) {
		ArrayList arrayList = new ArrayList();
		Class<?> entityClass = entity.getClass();
		Field[] fileds = entityClass.getDeclaredFields();
		try {
			for (Field f : fileds) {
				String getMethodName = "get"
						+ f.getName().substring(0, 1).toUpperCase()
						+ f.getName().substring(1);
				Method getMethod = entityClass.getMethod(getMethodName,
						new Class[] {});
				// System.out.println(setMethod);
				Object obj = getMethod.invoke(entity, new Object[] {});
				arrayList.add(obj);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {

			setSql(PrePareSql.deleteSql((entityClass)));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			setParams(arrayList);
			setParams(pstmt);
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

分享到:
评论

相关推荐

    Struts1 增删改查+分页

    在本项目"Struts1 增删改查+分页"中,我们将深入探讨如何利用Struts1实现对数据的基本操作以及分页显示。 1. **Struts1基础**: - **Action类**:是Struts1的核心,用于接收用户请求并执行业务逻辑。每个Action类...

    springmvc+spring4.x+hibernate4.x整合实现对学生信息的增删改查

    在本项目中,我们主要探讨的是如何将Spring MVC、Spring 4.x 和 Hibernate 4.x 框架整合,以实现对学生信息的CRUD(创建、读取、更新和删除)操作。数据库方面,选用的是Microsoft的SQL Server 2005。下面,我们将...

    springmvc+hibernate+spring学生表增删改查

    在"springmvc+hibernate+spring学生表增删改查"的项目中,我们将探讨如何利用这三个框架实现对一个学生表的CRUD(创建、读取、更新、删除)操作。 1. **SpringMVC**: - **配置**:首先,我们需要配置SpringMVC的...

    springmvc+hibernate+spring学生表增删改查.zip

    该压缩包文件"springmvc+hibernate+spring学生表增删改查.zip"涉及到的是一个基于Java技术栈的Web应用程序开发示例,主要利用Spring MVC、Hibernate和Spring框架来实现学生信息表的CRUD(创建、读取、更新、删除)...

    数据库操作增删改查模糊查

    首先,我们来看“增删改查”(CRUD)操作。在数据库管理中,CRUD是数据库应用的基本功能: 1. 增(Insert):插入新记录到数据库中。这通常涉及到编写SQL语句,如`INSERT INTO table_name (column1, column2, ...) ...

    spring+hibernate整合列子,用junit测试增删改查都实现(MySQL包含表)

    DAO接口中定义了增删改查的方法,如`save()`,`get()`,`update()`,`delete()`等。DAO实现类则利用Spring的`@Autowired`注解注入SessionFactory,通过Session对象执行SQL语句。Spring的事务管理在这里也起到了关键作用...

    使用springmvc做的增删改查

    本教程将深入探讨如何使用Spring MVC实现数据库的增删改查操作。 一、Spring MVC 概述 Spring MVC是Spring框架的一部分,它设计用于处理HTTP请求,提供了一个优雅的方式来组织和控制Web应用的流程。核心组件包括...

    模拟网盘系统,简单的增删改查

    【标题】:“模拟网盘系统,简单的增删改查” 这个标题揭示了我们要构建的是一个基本的云存储系统,它的核心功能包括文件的增加、删除、修改和查询操作。这通常是一个在线平台,用户可以存储、管理和分享他们的文件...

    SpringMVC增删改查

    在“SpringMVC增删改查”项目中,尽管没有直接与数据库进行连接,但我们可以看到它是用来模拟和演示基本的CRUD(Create、Read、Update、Delete)操作的。在实际的Web应用开发中,这些操作通常是与数据库交互的核心...

    SpringBoot数据库增删改查 事务管理

    本篇文章将深入探讨SpringBoot如何进行数据库的增删改查操作以及事务管理。 首先,让我们了解SpringBoot如何与数据库进行交互。SpringBoot通过集成JDBC、MyBatis或Hibernate等ORM框架,使得数据库操作变得简单易行...

    全注解版SSH增删改查所需jar包

    下面将详细介绍SSH框架以及如何使用注解进行增删改查操作。 1. **Struts2**:这是一个基于MVC设计模式的Web应用框架,用于替代Struts1。通过Action类和结果映射,它实现了请求到业务逻辑的映射。在全注解版中,我们...

    spring mvc +hibernate注解版测试增,删,改,查 简单xml配置应用

    hibernate注解版测试增,删,改,查 简单xml配置应用"是一个典型的后端开发示例,它涵盖了使用Spring MVC和Hibernate来实现数据库操作的基本功能:新增(Create)、删除(Delete)、更新(Update)和查询(Read)。...

    模拟hibernate中一级缓存

    当我们在应用程序中通过Hibernate的Session接口进行增删改查操作时,这些对象会被暂时存储在一级缓存中。这样做的好处在于减少了对数据库的直接访问,提高了数据读取的速度,同时也降低了数据库的压力。 一级缓存的...

    hibernate example

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

    DAO模式实现增加删除修改操作

    在DAO模式中,通常会定义一个接口,如`UserDAO`,包含增删改查等方法。例如,`addUser()`, `deleteUser()`, `updateUser()` 和 `findUser()`。然后,为这个接口创建一个实现类,如`UserDAOImpl`,在实现类中编写...

    Struts2+Hibernate的简单购物车

    通过实体类和配置文件,Hibernate能自动管理数据库的增删改查操作。 在本示例中,购物车可能由一个Cart类表示,其中包含商品项(Product)的集合。每个Product类都有自己的属性,如id、name、price等。在Hibernate...

    hibernate模拟hibernatetemplate

    **实现CRUD操作**:模拟HibernateTemplate的基本功能,如增删改查,可以创建一系列静态方法,例如`save(Object entity)`、`update(Object entity)`、`delete(Object entity)`和`load(Class&lt;?&gt; clazz, Serializable ...

    基于hibernate的baseDao

    BaseDAO通常包含一组通用的数据库操作方法,如增删改查(CRUD:Create、Read、Update、Delete)。这些方法由继承BaseDAO的子类调用,实现对特定领域对象的操作。这样,每个具体的DAO只需关注自己的业务逻辑,而无需...

    JAVA-hibernate笔记

    学习它们的用法,包括增删改查操作、事务处理,是掌握Hibernate核心功能的基础。 7. **对象的三种状态** Hibernate将对象分为瞬时态、持久态和游离态,理解这些状态及其转换,有助于避免并发问题和数据一致性问题...

Global site tag (gtag.js) - Google Analytics