最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

采用封装及反射原理封装一个将对象装换为对数据库操作的工具类

来源:懂视网 责编:小采 时间:2020-11-09 15:07:40
文档

采用封装及反射原理封装一个将对象装换为对数据库操作的工具类

采用封装及反射原理封装一个将对象装换为对数据库操作的工具类:package project02_Order_management.dao;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet
推荐度:
导读采用封装及反射原理封装一个将对象装换为对数据库操作的工具类:package project02_Order_management.dao;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet

package project02_Order_management.dao;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet

package project02_Order_management.dao;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class BaseDao {
	/**
	 * 查询所有数据方法
	 */
	public static List findAll(Object obj, Connection conn) throws Exception {
	// 获取要操作对象的类
	Class clazz = obj.getClass();
	// 获取传入实体的所有方法;
	Method[] methods = clazz.getDeclaredMethods();
	// 获取传入实体中的所有的属性
	Field[] fields = clazz.getDeclaredFields();
	// 建立结果集List接收对象
	List list = new ArrayList();
	// 创建查询的sql语句;
	String sql = "select * from "
	+ obj.getClass().getSimpleName().toLowerCase();
	System.out.println(sql);
	// System.out.println(sql);
	// 预编译sql语句
	PreparedStatement preparedStatement = conn.prepareStatement(sql);
	ResultSet resultSet = preparedStatement.executeQuery();
	// 从结果集中循环取出放入结果集List
	while (resultSet.next()) {
	// 查询的结果的接受对象
	Object entity = clazz.newInstance();

	// 循环类中的属性,进行复制操作
	for (int i = 0; i < fields.length; i++) {
	// 获取属性名称
	String fieldName = fields[i].getName();
	// 获取result结果集中的每个结果字段的对象
	Object fieldObject = resultSet.getObject(i + 1);
	if (fieldObject == null) {
	fieldObject = "null";// 防止数据为null时引发空指针异常
	}
	for (int j = 0; j < methods.length; j++) {
	// 比对属性名加上set后与方法名是否一致,进行对应的属性用对应的方法进行复制操作
	if (("set" + fieldName).equalsIgnoreCase(methods[j]
	.getName())) {
	// 执行传入对象的指定的方法
	methods[j].invoke(entity,
	resultSet.getObject(fieldName));
	}
	}
	}
	list.add(entity);
	}
	return list;
	}

	/**
	 * 根据id查询数据
	 * 
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 * @throws InvocationTargetException
	 * @throws IllegalArgumentException
	 */
	public static Object findById(Object obj, Integer id, Connection conn)
	throws SQLException, InstantiationException,
	IllegalAccessException, IllegalArgumentException,
	InvocationTargetException {
	// 获取要操作对象的类
	Class clazz = obj.getClass();
	// 获取传入实体的所有方法;
	Method[] methods = clazz.getDeclaredMethods();
	// 获取传入实体中的所有的属性
	Field[] fields = clazz.getDeclaredFields();
	// 查询的结果的接受对象
	Object entity = null;
	// 创建查询的sql语句;
	String sql = "select * from " + clazz.getSimpleName().toLowerCase()
	+ " where id=?";
	PreparedStatement preparedStatement = conn.prepareStatement(sql);
	preparedStatement.setInt(1, id);
	ResultSet resultSet = preparedStatement.executeQuery();
	if (resultSet.next()) {
	// 根据获取的实体的类,创建实体
	entity = clazz.newInstance();

	// 循环类中的属性,进行复制操作
	for (int i = 0; i < fields.length; i++) {
	// 获取属性名称
	String fieldName = fields[i].getName();

	// 获取result结果集中的每个结果字段的对象
	Object fieldObject = resultSet.getObject(i + 1);
	if (fieldObject == null) {
	fieldObject = "null";// 防止数据为null时引发空指针异常
	}

	for (int j = 0; j < methods.length; j++) {
	// 比对属性名加上set后与方法名是否一致,进行对应的属性用对应的方法进行复制操作
	if (("set" + fieldName).equalsIgnoreCase(methods[j]
	.getName())) {
	// 执行传入对象的指定的方法
	methods[j].invoke(entity,
	resultSet.getObject(fieldName));
	}
	}
	}
	}
	return entity;
	}

	/**
	 * 分页数据查询
	 * 
	 * @param obj
	 * 传入目标对象
	 * @param conn
	 * 传入数据库连接
	 * @param startRow
	 * 传入开始的行数
	 * @param endRow
	 * 传入结束的行数
	 */
	public static List paging(Object obj, Connection conn, Integer startRow,
	Integer endRow) {
	
	
	return null;
	}

	/**
	 * 保存方法
	 */
	public static void save(Object obj, Connection conn)
	throws IllegalAccessException, IllegalArgumentException,
	InvocationTargetException, SQLException {
	Class clazz = obj.getClass();
	Method[] methods = clazz.getDeclaredMethods();
	Field[] fields = clazz.getDeclaredFields();

	// 获取操作的表单名字,[这里类名必须和表名一致]
	String table = clazz.getSimpleName().toLowerCase();
	String fieldsName = "";
	for (int i = 0; i < fields.length; i++) {
	fieldsName = fieldsName + fields[i].getName() + ",";
	}
	fieldsName = fieldsName.substring(0, fieldsName.length() - 1);

	// 占位符的设置
	String placeholder = "";
	for (int j = 0; j < fields.length; j++) {
	// 拼接属性的get的方法名
	String str = "get" + fields[j].getName();
	for (int k = 0; k < methods.length; k++) {
	if (str.equalsIgnoreCase(methods[k].getName())) {
	placeholder = placeholder + "?" + ",";
	}
	}
	}
	placeholder = placeholder.substring(0, placeholder.length() - 1);

	// 拼接sql语句
	String sql = "insert into " + table + "(" + fieldsName + ")"
	+ " values " + "(" + placeholder + ")";
	System.out.println(sql);
	PreparedStatement pst = conn.prepareStatement(sql);
	int index = 1;
	for (int j = 0; j < fields.length; j++) {
	String str = "get" + fields[j].getName();
	// 循环方法名比对
	for (int k = 0; k < methods.length; k++) {
	// 如果当前的属性拼出的get方法名,与方法明集合中的有一样的执行
	if (str.equalsIgnoreCase(methods[k].getName())) {
	// 接收指定的方法执行后的数据
	Object p = methods[k].invoke(obj);
	// 为指定的占位符进行赋值
	pst.setObject(index++, p);
	}
	}
	}
	// 执行已经加载的sql语句
	pst.executeUpdate();
	}

	/**
	 * 更新数据
	 */
	public static void update(Object obj, Connection conn) throws Exception {
	// 修改
	Class clazz = obj.getClass();
	Method[] methods = clazz.getDeclaredMethods();
	Field[] fields = clazz.getDeclaredFields();
	/*
	 * 拼接Sql
	 */
	String table = clazz.getSimpleName().toLowerCase();
	String setField = "";
	int id = 1;
	for (int i = 0; i < fields.length; i++) {
	for (int j = 0; j < methods.length; j++) {
	String strGetField = "get" + fields[i].getName();
	if (strGetField.equalsIgnoreCase(methods[j].getName())) {
	/*
	 * 拼接sql语句中的set字段,并用占位符
	 */
	setField = setField + fields[i].getName() + "= ?,";
	// 获取id
	if ("getId".equalsIgnoreCase(methods[j].getName())) {
	id = Integer
	.parseInt(methods[j].invoke(obj).toString());
	}
	}
	}
	}
	setField = setField.substring(0, setField.length() - 1);
	String sql = "update " + table + " set " + setField + " where id= ?";
	System.out.println(sql);
	PreparedStatement pst = conn.prepareStatement(sql);

	int index = 1;
	for (int j = 0; j < fields.length; j++) {
	String str = "get" + fields[j].getName();
	// 循环方法名比对
	for (int k = 0; k < methods.length; k++) {
	// 如果当前的属性拼出的get方法名,与方法明集合中的有一样的执行
	if (str.equalsIgnoreCase(methods[k].getName())) {
	// 接收指定的方法执行后的数据
	Object p = methods[k].invoke(obj);
	// 为指定的占位符进行赋值
	pst.setObject(index++, p);
	}
	}
	}
	pst.setObject(index++, id);
	pst.execute();

	}

	/**
	 * 根据id删除数据
	 * 
	 * @throws SQLException
	 */
	public static void delById(Object obj, Integer id, Connection conn)
	throws SQLException {
	System.out.println("=============");
	Class clazz = obj.getClass();
	String table = clazz.getSimpleName().toLowerCase();
	String sql = "delete from " + table + " where id=?";
	System.out.println(sql);
	PreparedStatement preparedStatement = conn.prepareStatement(sql);
	preparedStatement.setInt(1, id);
	preparedStatement.execute();
	}

}

注:类名必须与表名一致,不区分大小写;

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

采用封装及反射原理封装一个将对象装换为对数据库操作的工具类

采用封装及反射原理封装一个将对象装换为对数据库操作的工具类:package project02_Order_management.dao;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet
推荐度:
标签: 一个 操作 原理
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top