1.三层架构

  • 表现层:用于展示数据
  • 业务层:处理业务需求
  • 持久层:和数据库交互

2.持久层技术解决方案

和数据库进行数据交互的技术有很多,但各有优缺:

  • JDBC:最底层的技术
    • Connection
    • PrepareStatement
    • ResultSet
  • Spring JDBCTemplate:对JDBC的简单封装
  • Apache的DB Utils:也是对JDBC的简单封装

但是以上这些技术都不是框架,JDBC是规范,Spring JDBCTemplate和DBUtils都只是工具类,是简单的封装,这种封装并不够细致。

3.问题分析

import java.sql.*;

public class jdbcProblem {
    // JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost/jdbc_db";

    //  Database credentials
    static final String USER = "root";
    static final String PASS = "123456";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            //STEP 2: Register JDBC driver
            Class.forName("com.mysql.jdbc.Driver");

            //STEP 3: Open a connection
            System.out.println("Connecting to a selected database...");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            System.out.println("Connected database successfully...");

            //STEP 4: Execute a query
            System.out.println("Creating statement...");
            stmt = conn.createStatement();

            String sql = "SELECT id, first, last, age FROM student";
            ResultSet rs = stmt.executeQuery(sql);
            //STEP 5: Extract data from result set
            while(rs.next()){
                //Retrieve by column name
                int id  = rs.getInt("id");
                int age = rs.getInt("age");
                String first = rs.getString("first");
                String last = rs.getString("last");

                //Display values
                System.out.print("ID: " + id);
                System.out.print(", Age: " + age);
                System.out.print(", First: " + first);
                System.out.println(", Last: " + last);
            }
            rs.close();
        }catch(SQLException se){
            se.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                if(stmt!=null)
                    conn.close();
            }catch(SQLException se){
            }
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}

以上是一个标准的使用JDBC进行数据库查询的代码,可以看到,我们为了一个查询语句需要写很多的跟业务不相关的代码,比如连接数据的一些配置,比如关闭连接等等。

而使用框架就能把这些繁琐的操作都封装起来,我们只需要关注与业务相关的代码就可以了,比如说最核心的那条数据查询的SQL语句。