Mybatis學習筆記(0)---- JDBC

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。使用簡單的 XML或註解用於配置和原始映射,將接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對象)映射成數據庫中的記錄。

在介紹Mybatis之前需要先了解一下JDBC,才能更清楚Mybatis究竟幫我們做了什麼。

JDBC

JDBC(Java Database Connectivity,Java數據庫連接)是java中用來規範客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。

JDBC的層次結構

(jdbc是sun公司提供一套用於數據庫操作的接口,java程序員只需面向這套接口編程即可。不同數據庫廠商,需要針對這套接口,提供不同的實現。不同的實現的集合即爲不同數據庫的驅動)

jdbc接口(API)包括兩個層次:

  面向應用的API:java API,抽象接口,供應用程序開發人員使用(連接數據庫,執行SQL語句,獲得結果)

  面向數據庫的API:java Driver API,供開發商開發數據庫驅動使用。

JDBC程序編寫步驟

獲取數據庫連接

  要素一:Driver接口實現類

  Driver接口介紹

  java.sql.Driver接口是所有JDBC驅動程序需要實現的接口。這個接口是提供給數據庫廠商使用的,不同數據庫廠商提供不同的實現。

  在程序中不需要直接去訪問實現了Driver接口的類,而是由驅動程序管理類(java.sql.Driveranager)去調用這些Driver實現。

  加載和註冊JDBC驅動

  加載驅動:加載JDBC驅動需調用Class類的靜態方法forName(),向其傳遞要加載的JDBC驅動的類名。Class.forName("com.mysql.jdbc.Driver")

  註冊驅動:DriverManager類是驅動程序管理類,負責管理驅動程序。使用DriverManager.registerDriver類的registerDriver()方法來註冊驅動了的實例,因爲Driver接口的驅動程序類都包含了靜態代碼塊,在這個靜態代碼塊中,會調用DriverManager.registerDriver()方法來註冊自身的一個實例。

  要素二:URL

  JDBC URL用於標誌一個被註冊的驅動程序,驅動程序管理器通過這個URL選擇正確的驅動程序,從而建立到數據庫的連接。

  JDBC URL的標準由三部分組成,各部分用冒號分割(jdbc:子協議:子名稱)【jdbc:mysql://localhost:3306/test】

public Connection getConnection(){
  //第一種
    Driver driver = com.mysql.jdbc.Driver();
  //第二種
  //Class clazz = Class.forName("com.mysql.jdbc.Driver");
  //Driver driver = (Driver)clazz.newInstance();
  String url = "jdbc:mysql://localhost:3306/test";
    Properties info = new Properties();
    info.setProperty("user", "root");
    info.setProperty("password", "123456");
    Connection connection = driver.connect(url, info);
    return connextion;
  //第三種
  //DriverManager.registerDriver(driver);//driver爲第二種中的driver
  //上面註冊可以不要,在Mysql的Driver實現類中,有一塊靜態代碼塊,已經實現了註冊
  //return DriverManager.getConection(url, user, password);//獲取到連接
}
//第四種,將基本信息放在配置文件中
public Connection getConnection(){
    //1.讀取配置文件中的4個基本信息
    InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");//ClassLoader.getSystemClassLoader()
    Properties pros = new Properties();
    pro.load(is);
    String user = pros.getProperty("user");
    String password = pros.getProperty("password");
    String url = pros.getProperty("url");
    String driverClass = pros.getProperty("driverClass");
    //2.加載驅動
    Class.forName(driverClass);
    //3.獲取連接
    return DriverManager.getConnection(url, user, password);
}

jdbc.properties
user=root
password=1234567
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver

使用PreparedStatement實現CRUD操作

  操作和訪問數據庫

  數據庫連接被用於向數據庫服務器發送命令和上去了語句,並接受數據庫服務器返回的結果,其實一個數據庫連接相當於一個socket連接。

  在java.sql包中有3個接口分別定義了對數據庫的調用的不同方式:

  Statement:用於執行靜態SQL語句並返回它所生成結果的對象。(弊端:需要拼寫Sql語句,可能存在Sql注入問題。)

  PreparedStatement:SQL語句被預編譯並存儲在此對象中,可以使用此對象多次高效的執行該語句。

  CallableStatement:用於執行SQL存儲過程。

 

public void testPreparedStatement(){
  //獲取連接
  Connection conn = getConnnection();
  //預編譯sql語句,返回PreparedStatement實例
  String sql = "insert into student(name,email) values (?,?)";
  PreparedStatement ps = conn.preparedStatement(sql) ;
  //填充佔位符
  ps.setString(1, "哪吒");
  ps.setString(2, "[email protected]");
  //執行操作
  ps.execute();
  conn.close();
  ps.close();  
}
public void testQuery() {
  Connection conn = getConnection();
  String sql = "select * from student where id = ?";
  PreparedStatement ps  = conn.prepareStatement(sql);
  ResultSet resultSet = ps.executeQuery();
  if(resultSet.next()){//判斷結果集中是否有數據,並指針下一
    int id = resultSet.getInt(1);
    String name = resultSet(2) ; 
  }
}

 

 

 

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章