针对单个表进行通用的查询操作

文章展示了如何使用ORM编程思想将数据库表映射到Java类,并通过PreparedStatement实现对Customer表的查询操作。具体包括创建Customer类,设置属性和构造器,以及编写查询方法,利用反射技术将查询结果映射回Customer对象。
摘要由CSDN通过智能技术生成

ORM编程思想:

一个数据表对应一个Java类
表中的一条记录对应Java类的一个对象
表中的一个字段对应Java类的一个属性

下面是Customer类:


import java.io.InputStream;
import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import org.junit.Test;

import com1connection.ConnectionTest;
public class Customer {
	private int id;
	private String name;
	private String email;
	private Date birth;
	
	
	
	//有参构造器
	public Customer(int id,String name,String email,Date birth){
		this.id=id;
		this.name=name;
		this.email=email;
		this.birth=birth;
	}
	
	//空参构造器
	public Customer(){
		super();
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	public Date getBirth() {
		return birth;
	}
	public void setBirth(Date birth) {
		this.birth = birth;
	}
	
	public String toString() {
		return "id=" + id + ", name=" + name + ", email=" + email + ", birth=" + birth;
	}
}

 针对customer表的通用的查询操作

package com3preparedstatement;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Date;

import org.junit.Test;

import com3preparedstatement.bean.Customer;
import com3preparedstatement.jdbc.jdbcConnection;
/*
 * 
 * 
 */
public class CustomerForQuery {
	@Test
	public void testQueryForCustomer(){
		String sql="select id,name,email,birth from customers where id=?";
		Customer cust = queryForCustomers(sql,3);
	
		System.out.println(cust);
		
	}

	public Customer queryForCustomers(String sql,Object ...args){
		//1、获取连接
		Connection conn=null;
		//2、实例化PreparedStatement对象
		PreparedStatement ps=null;
		//4、执行查询操作,返回结果集
		ResultSet rs=null;
		try {
			conn = jdbcConnection.connection();
			ps = conn.prepareStatement(sql);
			//3、填充sql中的占位符
			for(int i=0;i<args.length;i++){
				ps.setObject(i+1, args[i]);
			}
			rs = ps.executeQuery();
			//获取结果集的元数据:ResultSetMetaData
			ResultSetMetaData rsmd=rs.getMetaData();
			//通过ResultSetMetaDate获取结果集中的列数
			int columnCount=rsmd.getColumnCount();
			//5、处理结果集中的数据
			if(rs.next()){
				Customer cust=new Customer();
				//处理结果集一行数据中的每一个列
				for(int i=0;i<columnCount;i++){
					//获取列值
					Object columnValue=rs.getObject(i+1);
					
					//获取每个列的列名
					String columnName=rsmd.getColumnName(i+1);
					
					//给cust对象指定的某个属性,赋值为cloumnValue:通过反射
					Field field=Customer.class.getDeclaredField(columnName);
					field.setAccessible(true);
					field.set(cust,columnValue);
				}
				return cust;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			jdbcConnection.CloseResource(conn, ps,rs);
		}
		
		return null;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值