y2第一章 初始mybatis的上机3_MyBatis3.2.x从入门到精通之第一章
第一章
一、引言
mybatis是一個(gè)持久層框架,是apache下的頂級(jí)項(xiàng)目。mybatis托管到goolecode下,再后來托管到github下。(百度百科有解釋)
二、概述
mybatis讓程序?qū)⒅饕Ψ旁趕ql上,通過mybatis提供的映射方式,自由靈活生成(半自動(dòng)化,大部分需要程序員編寫sql)滿足需要sql語句。
mybatis可以將向preparedStatement中的輸入?yún)?shù)自動(dòng)進(jìn)行輸入映射,將查詢結(jié)果集靈活映射成java對(duì)象。(輸出映射)
三、框架原理
sqlMapConfig.xml:(是mybatis的全局配置文件,名稱不固定的)配置了數(shù)據(jù)源、事務(wù)等mybatis運(yùn)行環(huán)境
mapper.xml:配置sql語句
SqlSessionFactory:(會(huì)話工廠),根據(jù)配置文件創(chuàng)建工廠作用:創(chuàng)建SqlSession
SqlSession(會(huì)話),是一個(gè)接口,面向用戶(程序員)的接口作用:操作數(shù)據(jù)庫(發(fā)出sql增、刪、改、查)
Executor(執(zhí)行器),是一個(gè)接口(基本執(zhí)行器、緩存執(zhí)行器)作用:SqlSession內(nèi)部通過執(zhí)行器操作數(shù)據(jù)庫
mapped statement(底層封裝對(duì)象)作用:對(duì)操作數(shù)據(jù)庫存儲(chǔ)封裝,包括 sql語句,輸入?yún)?shù)、輸出結(jié)果類型。
三、總結(jié)傳統(tǒng)JDBC開發(fā)出現(xiàn)的問題
// 數(shù)據(jù)庫連接
Connection connection = null;
// 預(yù)編譯的Statement,使用預(yù)編譯的Statement提高數(shù)據(jù)庫性能
PreparedStatement preparedStatement = null;
// 結(jié)果 集
ResultSet resultSet = null;
try {
// 加載數(shù)據(jù)庫驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");
// 通過驅(qū)動(dòng)管理類獲取數(shù)據(jù)庫鏈接
connection = DriverManager
.getConnection(
"jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8",
"root", "root");
// 定義sql語句 ?表示占位符
String sql = "select * from user where username = ?";
// 獲取預(yù)處理statement
preparedStatement = connection.prepareStatement(sql);
// 設(shè)置參數(shù),第一個(gè)參數(shù)為sql語句中參數(shù)的序號(hào)(從1開始),第二個(gè)參數(shù)為設(shè)置的參數(shù)值
preparedStatement.setString(1, "xx");
// 向數(shù)據(jù)庫發(fā)出sql執(zhí)行查詢,查詢出結(jié)果集
resultSet = preparedStatement.executeQuery();
// 遍歷查詢結(jié)果集
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + " "
+ resultSet.getString("username"));
}
} 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();
}
}
}
這段代碼中充斥著硬編碼。
存在的問題大概分為這么幾種:
第一:對(duì)數(shù)據(jù)連接對(duì)象的使用,需要的時(shí)候就用,不需要的時(shí)候就關(guān)閉,這種頻繁的操作數(shù)據(jù)庫連接是一件很浪費(fèi)資源的事情。
第二:sql語句編寫在java代碼中,當(dāng)后期需要維護(hù)和修改sql那么這個(gè).java文件需要重新編譯。維護(hù)成本很高
第三:preparedStatement中設(shè)置參數(shù),對(duì)占位符號(hào)位置和設(shè)置參數(shù)值,硬編碼在java代碼中,不利于系統(tǒng)維護(hù)。
第四:遍歷結(jié)果集,我相信使用過結(jié)果集的人,會(huì)對(duì)這邊的情況很是頭疼尤其是查詢的字段很多的時(shí)候,一不留神字符串寫錯(cuò),那么數(shù)據(jù)就取不到了。
。。。
以上問題在MyBatis中有很好的解決方法。
本文為慕課網(wǎng)作者原創(chuàng),轉(zhuǎn)載請(qǐng)標(biāo)明【原文作者及本文鏈接地址】。侵權(quán)必究,謝謝合作!
總結(jié)
以上是生活随笔為你收集整理的y2第一章 初始mybatis的上机3_MyBatis3.2.x从入门到精通之第一章的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 名词解释失效安全_09失效分析复习题新
- 下一篇: vivadohlsdsp_Vivado