JDBC数据库操作_11ORM(list,set,map)

ORM基本思想

全称:object relationship mapping——对象关系映射

  1. 表结构跟类对应;表中字段和类的属性对应;表中记录和对象对应
  2. 让javabean的属性名和类型尽量和数据库保持一致
  3. 一条记录对应一个对象。将这些查询到的对象放到容器中(list,set,map)
    注:util工具类在JDBC数据库操作_10中可以自行翻阅
    将表中的一条记录封装到Object数组中
package cn.text.orm;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/***
 *测试使用Object[]来封装一条记录
 *使用list<Object[]>存储多条记录
 */
public class Demo01 {
	public static void main(String[] args) {
		Connection conn = util.getMysqlConn();
		PreparedStatement ps = null;
		ResultSet rs = null; 
		List<Object[]> list= new ArrayList<Object[]>();
		try {
			ps = conn.prepareStatement("select empname,salary,age from emp where id>?");

			//ps = conn.prepareStatement("select empname,salary,age from emp where id=?");
			
			ps.setObject(1, 1);
			rs = ps.executeQuery(); 
			while(rs.next()){
				Object[] objs= new Object[3];  //方法关闭后,也可以通过数组引用信息
				//一个object数组封装了一条记录的信息,如果要多条,可以继续封装object数组——list
				
//				System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3));
				//double,int,string都是object
				objs[0]= rs.getString(1);
				objs[1] = rs.getObject(2);
				objs[2] = rs.getObject(3);
				
				list.add(objs);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			util.close(rs, ps, conn);
		}
		
		for(Object[] objs:list){
			System.out.println(""+objs[0]+objs[1]+objs[2]);
		}
		
		
	}
}

将表中的一条记录封装到map中

package cn.text.orm;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/***
 * 使用Map来封装一条记录
 * 使用List<Map>,Map<Map>存储多条记录
 * @author Administrator
 *
 */
public class Demo02 {
	
	public static void test01(){
		Connection conn = util.getMysqlConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		Map<String,Object> row = new HashMap<String, Object>();  //使用一个Map封装一条记录
		try {
			ps = conn.prepareStatement("select empname,salary,age from emp where id=?");
			ps.setObject(1, 1);
			rs = ps.executeQuery();
			while(rs.next()){
//				System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3));
				//key-value
				row.put("empname", rs.getObject(1));
				row.put("salary", rs.getObject(2));
				row.put("age", rs.getObject(3));
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			util.close(rs, ps, conn);
		}
		
		//遍历Map,就是遍历这一行的信息
		for(String key:row.keySet()){
			System.out.print(key+"--"+row.get(key)+"\t");
		}
	} 
	
	//存多行信息
	public static void test02(){
		Connection conn = util.getMysqlConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Map<String,Object>> list= new ArrayList<Map<String,Object>>();
		try {
			ps = conn.prepareStatement("select empname,salary,age from emp where id>?");
			ps.setObject(1, 1);
			rs = ps.executeQuery();
			while(rs.next()){
//				System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3));
				Map<String,Object> row = new HashMap<String, Object>(); //使用一个Map封装一条记录
				row.put("empname", rs.getObject(1));
				row.put("salary", rs.getObject(2));
				row.put("age", rs.getObject(3));
				list.add(row);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			util.close(rs, ps, conn);
		}
		
		//遍历Map,就是遍历这一行的多列的信息
		for(Map<String,Object> row:list){
			for(String key:row.keySet()){
				System.out.print(key+"--"+row.get(key)+"\t");
			}
			System.out.println();
		}
	}
	
	public static void test03(){
		Connection conn = util.getMysqlConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		Map<String,Map<String,Object>> maps = new HashMap<String,Map<String,Object>>();
		try {
			ps = conn.prepareStatement("select empname,salary,age from emp where id>?");
			ps.setObject(1, 1);
			rs = ps.executeQuery();
			while(rs.next()){
//				System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3));
				Map<String,Object> row = new HashMap<String, Object>(); //使用一个Map封装一条记录
				row.put("empname", rs.getObject(1));
				row.put("salary", rs.getObject(2));
				row.put("age", rs.getObject(3));
				maps.put(rs.getString(1), row);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			util.close(rs, ps, conn);
		}
		
		//遍历Map,就是遍历这一行的多列的信息
		
		for(String empname:maps.keySet()){
			Map<String,Object> row = maps.get(empname);
			for(String key:row.keySet()){ 
				System.out.print(key+"--"+row.get(key)+"\t");
			}
			System.out.println();
		}
	}
	
	
	public static void main(String[] args) {
		test01();
		test02();
		test03();
		
	}
}

将表中一条记录封装到javabean对象中(通过类结构)
两个表:emp和dept
所以有两个类:Emp和Dept
Emp如下:

package cn.text.orm;

import java.sql.Date;

public class Emp {   //表结构和类对应
	//字段和属性保持一致
	private Integer id;
	private String empname;
	private Integer age;
	private Double salary;
	private Date birthday;
	private Integer deptId;
	
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getEmpname() {
		return empname;
	}
	public void setEmpname(String empname) {
		this.empname = empname;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Double getSalary() {
		return salary;
	}
	public void setSalary(Double salary) {
		this.salary = salary;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public Integer getDeptId() {
		return deptId;
	}
	public void setDeptId(Integer deptId) {
		this.deptId = deptId;
	}
	public Emp(Integer id, String empname, Integer age, Double salary,
			Date birthday, Integer deptId) {
		super();
		this.id = id;
		this.empname = empname;
		this.age = age;
		this.salary = salary;
		this.birthday = birthday;
		this.deptId = deptId;
	}
	public Emp(String empname, Integer age, Double salary, Date birthday,
			Integer deptId) {
		super();
		this.empname = empname;
		this.age = age;
		this.salary = salary;
		this.birthday = birthday;
		this.deptId = deptId;
	}
	
	
	public Emp(String empname,Double salary, Integer age) {
		super();
		this.empname = empname;
		this.age = age;
		this.salary = salary;
	}
	public Emp() {
	}
	
}

Dept如下:

package cn.text.orm;

public class Dept {
	private Integer id;
	private String dname;
	private String address;
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Dept(Integer id, String dname, String address) {
		super();
		this.id = id;
		this.dname = dname;
		this.address = address;
	}
	public Dept(String dname, String address) {
		super();
		this.dname = dname;
		this.address = address;
	}
	
	public Dept() {
	}
	
}

使用如下:

package cn.text.orm;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/***
 * 使用Javabean对象来封装一条记录
 * 使用List<Javabean>存储多条记录
 *
 */
public class Demo03 {
	
	public static void test01(){
		Connection conn = util.getMysqlConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		Emp emp = null;
		try {
			ps = conn.prepareStatement("select empname,salary,age from emp where id=?");
			ps.setObject(1, 1);
			rs = ps.executeQuery();
			while(rs.next()){
//				System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3));
				emp = new Emp(rs.getString(1),rs.getDouble(2),rs.getInt(3));
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			util.close(rs, ps, conn);
		}
		
		System.out.println(emp.getEmpname()+"-"+emp.getSalary()+"-"+emp.getAge());
	}
	
	public static void test02(){
		Connection conn = util.getMysqlConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Emp> list= new ArrayList<Emp>();
		try {
			ps = conn.prepareStatement("select empname,salary,age from emp where id>?");
			ps.setObject(1, 1);
			rs = ps.executeQuery();
			while(rs.next()){
				Emp emp = new Emp(rs.getString(1),rs.getDouble(2),rs.getInt(3));
				list.add(emp);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			util.close(rs, ps, conn);
		}
		
		//遍历List,就是遍历这一行的多列的信息
		for(Emp emp:list){
			System.out.println(emp.getEmpname()+"-"+emp.getSalary()+"-"+emp.getAge());
		}
	}
	
	public static void main(String[] args) {
		//test01();
		test02();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值