ORM(Object RelationShip Mapping)的基本思想

  • 表结构跟类对应;表中的字段和类的属性对应;表中的记录和对象对应

  • 让javabean的属性名和类型尽量和数据库保持一致

  • 一条记录对应一个对象,将这些查询到的对象放到容器中

  • 将表中的一条记录封装到Object数组中

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

  • 将表中一条记录封装到javabean对象中

封装连接和关闭

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtil {

    //用于读取资源文件中的信息
    static Properties pros = null;

    //加载JDBCUtil类的时候调用
    static {
        pros = new Properties();
        try {
            pros.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("db.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
        try {
            Class.forName(pros.getProperty("Driver"));
            return DriverManager.getConnection(pros.getProperty("Url"),
                pros.getProperty("User"),
                pros.getProperty("Password"));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void close(ResultSet rs,Statement st,Connection conn){

        try {
            if(rs!=null){
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            if(st!=null){
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            if(conn!=null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

}

使用Object数组封装一条记录

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[]>存储多条记录
 * @author Matrix42
 *
 */
public class Demo01 {
    public static void main(String[] args) {
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        Object[] obj = null;
        List<Object[]> list = new ArrayList<Object[]>();
        //Alt+Shift+Z  add try-catch block
        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("empname"));
                obj = new Object[3];
                //一个Object封装一条数据
                //多条可以用容器
                obj[0] = rs.getObject(1);
                obj[1] = rs.getObject(2);
                obj[2] = rs.getObject(3);
                list.add(obj);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtil.close(rs, ps, conn);
        }
        //连接关闭后还可以获取内容
        for (Object[] objs : list) {
            System.out.println(""+objs[0]+"\n"+objs[1]+"\n"+objs[2]);
        }   
    }
}

使用Map封装一条记录

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>存储多条记录
 * @author Matrix42
 *
 */
public class Demo02 {
    public static void main(String[] args) {
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        //使用一个Map封装一条记录
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        //Alt+Shift+Z  add try-catch block
        try {
            ps = conn.prepareStatement("select empname,salary,age from emp where id < ?");
            ps.setObject(1, 3);
            rs = ps.executeQuery();

            while(rs.next()){
                Map<String, Object> row = new HashMap<String, Object>();
                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{
            JDBCUtil.close(rs, ps, conn);
        }
        //连接关闭后还可以获取内容
        for (Map<String, Object> map : list) {
            System.out.println(map.get("empname"));
            System.out.println(map.get("salary"));
            System.out.println(map.get("age"));
        }
    }

}

使用javabean对象封装一条记录

import java.sql.Date;

//表和类对应
/**
 * emp表的javabean
 * @author Matrix42
 *
 */
public class Emp {

    private Integer id;
    private String empname;
    private Double salary;
    private Date birthday;
    private Integer age;
    private Integer deptId;

    //javabean一定要有空构造器
    public Emp() {
        super();

    }

    public Emp(String empname, Double salary, Date birthday, 
            Integer age, Integer deptId) {
        super();
        this.empname = empname;
        this.salary = salary;
        this.birthday = birthday;
        this.age = age;
        this.deptId = deptId;
    }

    public Emp(Integer id, String empname, Double salary, Date birthday, 
            Integer age, Integer deptId) {
        super();
        this.id = id;
        this.empname = empname;
        this.salary = salary;
        this.birthday = birthday;
        this.age = age;
        this.deptId = 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 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 getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getDeptId() {
        return deptId;
    }

    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }

    //方便打印
    @Override
    public String toString() {
        return "Emp [id=" + id + ", empname=" + empname + ", salary=" + salary
                + ", birthday=" + birthday + ", age=" + age + ", deptId="
                + deptId + "]";
    }

}
/**
 * dept表的javabean
 * @author Matrix42
 *
 */
public class Dept {

    private Integer id;
    private String address;
    private String dname;
    public Dept() {
        super();

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

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

/**
 * 测试使用javabean来封装一条记录
 * 使用List<javabean>存储多条记录
 * @author Matrix42
 *
 */
public class Demo03 {
    public static void main(String[] args) {
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        //使用一个Map封装一条记录
        List<Emp> list = new ArrayList<Emp>();

        //Alt+Shift+Z  add try-catch block
        try {
            ps = conn.prepareStatement("select empname,salary,age from emp where id < ?");
            ps.setObject(1, 3);
            rs = ps.executeQuery();

            while(rs.next()){
                Emp emp = new Emp(rs.getString(1),rs.getDouble(2),null,rs.getInt(3),null);
                list.add(emp);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtil.close(rs, ps, conn);
        }
        //连接关闭后还可以获取内容
        for (Emp emp : list) {
            System.out.println(emp);
        }
    }

}