ORM基本思想
全称:object relationship mapping——对象关系映射
- 表结构跟类对应;表中字段和类的属性对应;表中记录和对象对应
- 让javabean的属性名和类型尽量和数据库保持一致
- 一条记录对应一个对象。将这些查询到的对象放到容器中(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();
}
}