日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

y2第一章 初始mybatis的上机3_MyBatis3.2.x从入门到精通之第一章

發(fā)布時(shí)間:2025/3/19 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 y2第一章 初始mybatis的上机3_MyBatis3.2.x从入门到精通之第一章 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第一章

一、引言

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。