模拟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实现对数据的基本操作以及分页显示。 1. **Struts1基础**: - **Action类**:是Struts1的核心,用于接收用户请求并执行业务逻辑。每个Action类...
在本项目中,我们主要探讨的是如何将Spring MVC、Spring 4.x 和 Hibernate 4.x 框架整合,以实现对学生信息的CRUD(创建、读取、更新和删除)操作。数据库方面,选用的是Microsoft的SQL Server 2005。下面,我们将...
在"springmvc+hibernate+spring学生表增删改查"的项目中,我们将探讨如何利用这三个框架实现对一个学生表的CRUD(创建、读取、更新、删除)操作。 1. **SpringMVC**: - **配置**:首先,我们需要配置SpringMVC的...
该压缩包文件"springmvc+hibernate+spring学生表增删改查.zip"涉及到的是一个基于Java技术栈的Web应用程序开发示例,主要利用Spring MVC、Hibernate和Spring框架来实现学生信息表的CRUD(创建、读取、更新、删除)...
首先,我们来看“增删改查”(CRUD)操作。在数据库管理中,CRUD是数据库应用的基本功能: 1. 增(Insert):插入新记录到数据库中。这通常涉及到编写SQL语句,如`INSERT INTO table_name (column1, column2, ...) ...
DAO接口中定义了增删改查的方法,如`save()`,`get()`,`update()`,`delete()`等。DAO实现类则利用Spring的`@Autowired`注解注入SessionFactory,通过Session对象执行SQL语句。Spring的事务管理在这里也起到了关键作用...
本教程将深入探讨如何使用Spring MVC实现数据库的增删改查操作。 一、Spring MVC 概述 Spring MVC是Spring框架的一部分,它设计用于处理HTTP请求,提供了一个优雅的方式来组织和控制Web应用的流程。核心组件包括...
【标题】:“模拟网盘系统,简单的增删改查” 这个标题揭示了我们要构建的是一个基本的云存储系统,它的核心功能包括文件的增加、删除、修改和查询操作。这通常是一个在线平台,用户可以存储、管理和分享他们的文件...
在“SpringMVC增删改查”项目中,尽管没有直接与数据库进行连接,但我们可以看到它是用来模拟和演示基本的CRUD(Create、Read、Update、Delete)操作的。在实际的Web应用开发中,这些操作通常是与数据库交互的核心...
本篇文章将深入探讨SpringBoot如何进行数据库的增删改查操作以及事务管理。 首先,让我们了解SpringBoot如何与数据库进行交互。SpringBoot通过集成JDBC、MyBatis或Hibernate等ORM框架,使得数据库操作变得简单易行...
下面将详细介绍SSH框架以及如何使用注解进行增删改查操作。 1. **Struts2**:这是一个基于MVC设计模式的Web应用框架,用于替代Struts1。通过Action类和结果映射,它实现了请求到业务逻辑的映射。在全注解版中,我们...
hibernate注解版测试增,删,改,查 简单xml配置应用"是一个典型的后端开发示例,它涵盖了使用Spring MVC和Hibernate来实现数据库操作的基本功能:新增(Create)、删除(Delete)、更新(Update)和查询(Read)。...
当我们在应用程序中通过Hibernate的Session接口进行增删改查操作时,这些对象会被暂时存储在一级缓存中。这样做的好处在于减少了对数据库的直接访问,提高了数据读取的速度,同时也降低了数据库的压力。 一级缓存的...
3. **测试代码**:编写JUnit测试用例,模拟用户增删改查的完整流程,检查Hibernate功能是否正常工作。 压缩包中的“.files”文件夹可能包含了相关的图片、配置文件或日志,它们是教程中的辅助材料,帮助理解每个...
在DAO模式中,通常会定义一个接口,如`UserDAO`,包含增删改查等方法。例如,`addUser()`, `deleteUser()`, `updateUser()` 和 `findUser()`。然后,为这个接口创建一个实现类,如`UserDAOImpl`,在实现类中编写...
通过实体类和配置文件,Hibernate能自动管理数据库的增删改查操作。 在本示例中,购物车可能由一个Cart类表示,其中包含商品项(Product)的集合。每个Product类都有自己的属性,如id、name、price等。在Hibernate...
**实现CRUD操作**:模拟HibernateTemplate的基本功能,如增删改查,可以创建一系列静态方法,例如`save(Object entity)`、`update(Object entity)`、`delete(Object entity)`和`load(Class<?> clazz, Serializable ...
BaseDAO通常包含一组通用的数据库操作方法,如增删改查(CRUD:Create、Read、Update、Delete)。这些方法由继承BaseDAO的子类调用,实现对特定领域对象的操作。这样,每个具体的DAO只需关注自己的业务逻辑,而无需...
学习它们的用法,包括增删改查操作、事务处理,是掌握Hibernate核心功能的基础。 7. **对象的三种状态** Hibernate将对象分为瞬时态、持久态和游离态,理解这些状态及其转换,有助于避免并发问题和数据一致性问题...