JDBC连接数据库的五个步骤、Mybatis是什么?可以解决jdbc的什么问题。
JDBC連接數(shù)據(jù)庫大概可以分為五個步驟:
1)加載驅(qū)動
2)建立連接
3)創(chuàng)建statement對象(創(chuàng)建執(zhí)行者)
4)執(zhí)行SQL(執(zhí)行命令),返回結(jié)果
5)關(guān)閉數(shù)據(jù)庫
Statement對象執(zhí)行不帶參數(shù)的簡單SQL語句
Prepared Statement對象用于執(zhí)行預編譯SQL語句
Callable Statement對象用于執(zhí)行對存儲過程的調(diào)用
1)利用類的反射來獲取驅(qū)動
加載 mysql驅(qū)動,Class.forName("com.mysql.jdbc.Driver");
2)獲得數(shù)據(jù)庫連接對象Connection
//通過驅(qū)動管理類獲取數(shù)據(jù)庫連接
conn = DriverManager.getConnection(DB_URL,USER,PASS);
3)實例化Statement對象,執(zhí)行SQL
Statement stmt = conn.createStatement(); String sql = "SELECT id, name, url FROM websites"; ResultSet rs = stmt.executeQuery(sql);
或者// 定義sql語句 ?表示占位符 String sql = "select * from user where username = ?"; // 獲取預處理statement preparedStatement = connection.prepareStatement(sql); // 設(shè)置參數(shù),第一個參數(shù)為sql語句中參數(shù)的序號(從1開始),第二個參數(shù)為設(shè)置的參數(shù)值 preparedStatement.setString(1, "王五"); // 向數(shù)據(jù)庫發(fā)出sql執(zhí)行查詢,查詢出結(jié)果集 resultSet = preparedStatement.executeQuery();
// 遍歷查詢結(jié)果集
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + " " + resultSet.getString("username"));
}
4)遍歷結(jié)果集
while(rs.next()){
// 通過字段檢索
int id = rs.getInt("id");
String name = rs.getString("name");
String url = rs.getString("url");
// 輸出數(shù)據(jù)
System.out.print("ID: " + id);
System.out.print(", 站點名稱: " + name);
System.out.print(", 站點 URL: " + url);
System.out.print("
");
}
5)關(guān)閉連接,釋放資源
jdbc更詳細一點的步驟:
1)加載數(shù)據(jù)庫驅(qū)動
2)創(chuàng)建并獲取數(shù)據(jù)庫連接
3)創(chuàng)建jdbc statement對象
4)設(shè)置sql語句
5)設(shè)置sql語句中的參數(shù)(使用preparedStatement)
6)通過statement執(zhí)行sql并獲取結(jié)果
7)對sql執(zhí)行結(jié)果進行解析
8)釋放資源(resultSet、preparedStatement、connection、connection)
JDBC問題總結(jié):
1、數(shù)據(jù)庫連接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費,從而影響系統(tǒng)性能。如果使用數(shù)據(jù)庫連接池可以解決此問題。
2、SQL語句在代碼中硬編碼,造成代碼不易維護,實際應(yīng)用中sql變化的可能性較大,sql變動需要改變java代碼。
3、使用preparedStatement向占有位符號傳參數(shù)存在硬編碼,因為sql語句的where條件不一定,可能多也可能少,修改sql還要修改代碼,系統(tǒng)不易維護。
4、對結(jié)果集的解析也存在硬編碼,sql變化導致解析代碼變化,系統(tǒng)不易維護如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便。
Mybatis可以解決jdbc編程的一些問題:
問題:1、數(shù)據(jù)庫連接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費,從而影響系統(tǒng)性能。如果使用數(shù)據(jù)庫連接池可以解決此問題。
解決:在配置文件中配置數(shù)據(jù)庫連接池,使用連接處管理數(shù)據(jù)庫連接。
問題:2、SQL語句在代碼中硬編碼,造成代碼不易維護,實際應(yīng)用中sql變化的可能性較大,sql變動需要改變java代碼。
解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。
問題:3、向sql語句傳參麻煩,sql語句where條件不一定,占位符需要和參數(shù)一 一對應(yīng)
解決:Mybatis可以自動將java對象映射至sql語句,通過statement中的parameterType定義傳入?yún)?shù)的類型。
問題:4、對結(jié)果集解析麻煩,sql變化導致解析代碼變化,且解析前需要需要遍歷,如果能將數(shù)據(jù)庫記錄封裝陳pojo對象解析比較方便。
解決:Mybatis可以自動將sql執(zhí)行結(jié)果映射至java對象,通過statement中的resultType定義輸出結(jié)果的類型。
MyBatis是什么
Mybatis是一個優(yōu)秀的持久層框架,它對jdbc的操作數(shù)據(jù)庫的過程進行封裝,是開發(fā)者只需要關(guān)注SQL本身,而不需要花費精力去處理例如注冊驅(qū)動、創(chuàng)建connection、創(chuàng)建statement、手動設(shè)置參數(shù)、結(jié)果集檢索等jdbc繁雜的過程代碼。
Mybatis通過xml或注解的方式將要執(zhí)行的各種statement(statement、preparedStatement、CallableStatement)配置起來,并通過java對象和statement中的sql進行映射成最終執(zhí)行的sql語句,最后由Mybatis框架執(zhí)行sql并將結(jié)果映射成java對象并返回。
參考:https://blog.csdn.net/qq_44543508/article/details/97007064等
總結(jié)
以上是生活随笔為你收集整理的JDBC连接数据库的五个步骤、Mybatis是什么?可以解决jdbc的什么问题。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: emitter-Client
- 下一篇: excel把按行合并的单元格重新拆分