傳統的jdbc代碼:
package com;
import java.sql.*;
/**
* @author liuyj
* @Title: JdbcTest
* @create 2020-05-27 17:31
* @ProjectName algorithm-Exercise
* @Description: TODO
*/
public class JdbcTest {
public static void main(String[] args) {
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
try {
//加載驅動
Class.forName("com.mysql.jdbc.Driver");
//通過驅動管理類來獲取資料庫連接
connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis","root","root");
//定義sql陳述句 ?表示占位符
String sql="select * from user where username=?";
//獲取預處理statement
preparedStatement=connection.prepareStatement(sql);
//設定引數
preparedStatement.setString(1,"tom");
//執行查詢獲取結果
resultSet = preparedStatement.executeQuery();
//遍歷查詢結果集
while (resultSet.next()) {
int id=resultSet.getInt("id");
String username=resultSet.getString("username");
System.out.println(username+id);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//釋放資源
if(resultSet !=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
jdbc存在的問題:

自定義框架設計
使用端(專案):引入自定義持久層框架的jar包
提供兩部分配置資訊:資料庫配置資訊、sql配置資訊:sql陳述句、引數型別、回傳值型別
使用組態檔來提供這兩部分資訊:
(1)sqlMapConfig.xml:存放資料庫配置資訊,引入mapper.xml(存放mapper.xml的全路徑)
(2)Mapper.xml:存放sql陳述句的組態檔資訊
框架端(自定義持久層框架,本質就是對jdbc代碼進行了封裝):
1.讀取組態檔
根據組態檔的路徑,加載組態檔成位元組輸入流,存盤在記憶體中
創建Resource類
方法:InputStream getResourceAsStream(String path)
2.創建兩個javabean來存盤:存放的就是對組態檔決議出來的內容
(1)Configuration核心配置類:存放sqlMapConfig.xml決議出來的內容
(2)MappedStatement:映射配置類,存放mapper.xm決議出來的內容(sql陳述句,輸入引數java型別,輸出引數java型別)
3.決議組態檔:dom4j
創建類SqlSessionFactoryBuilder 方法:build(InputStream in)
第一,使用dom4j決議組態檔的內容,將決議出來的內容封裝到容器物件中
第二,創建SqlSessionFactory物件;生產sqlSession:會話物件(工廠模式)
4.創建SqlSessionFactory介面及實作類DefaultSqlSessionFactory
第一,openSession:生產sqlSession
5.創建SqlSession 介面及實作類DefaultSession
定義對資料庫的crud操作:selectList()
selectOne()
update()
delete()
6.創建Executor介面及實作類SimpleExecutor實作類:
query(Configuration,MappedStatement,Object... params):執行的是jdbc代碼
歡迎訪問:
易水寒的博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179625.html
標籤:Java
