day61_Mybatis學習筆記_01
- 今天內容安排:
- 1、mybatis的介紹
- 2、分析原生態jdbc程式中存在的問題
- 3、mybatis的框架原理(重點)
- 4、入門程式
- 訂單商品案例(使用者表)
- 5、Mybatis開發dao的方式(重點)
- a) 原始dao的開發方式(開發dao介面和dao實現類,由ibatis遺留下來的風格)
- b) Mapper代理的開發方式(推薦方式,開發mapper介面(相當於dao介面))
- 6、全域性配置檔案
- 7、對映檔案(重點)
- a) 輸入對映
- b) 輸出對映
- c) 動態sql
- a) 輸入對映
- 8、mybatis和hibernate的區別及應用場景
1、mybatis的介紹
- mybatis就是一個封裝的jdbc的持久層框架,它和hibernate都屬於ORM(Object Relational Mapping)框架,但是具體的說,hibernate是一個完全的ORM框架,而mybatis是一個不完全的ORM框架。
- mybatis讓程式設計師
只關注sql本身
,而不需要去關注如:註冊驅動、建立connection、建立statement、手動設定引數、結果集檢索等jdbc繁雜的過程程式碼。 - mybatis會將輸入引數、輸出結果進行對映。而不是把物件關係對映成sql。
詳解如下:
MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis,實質上Mybatis對ibatis進行一些改進。
MyBatis是一個優秀的持久層框架,它對jdbc的操作資料庫的過程進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如:註冊驅動、建立connection、建立statement、手動設定引數、結果集檢索等jdbc繁雜的過程程式碼。
Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,並通過java物件和statement中的sql進行對映生成最終執行的sql語句,最後由mybatis框架執行sql並將結果對映成java物件並返回。
2、分析原生態jdbc程式中存在的問題
2.1、原生態Jdbc程式程式碼
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 1、載入資料庫驅動
Class.forName("com.mysql.jdbc.Driver");
// 2、通過驅動管理類獲取資料庫連結
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
// 3、定義sql語句,?表示佔位符
String sql = "select * from user where username = ?";
// 4、獲取預處理statement物件
preparedStatement = connection.prepareStatement(sql);
// 5、設定引數,第一個引數為sql語句中引數的序號(從1開始),第二個引數為設定的引數值
preparedStatement.setString(1, "曉藝");
// 6、向資料庫發出sql執行查詢,查詢出結果集
resultSet = preparedStatement.executeQuery();
// 7、遍歷查詢結果集
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + " " + resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 8、釋放資源
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();
}
}
}
}
2.2、Jdbc問題總結
- 1、資料庫連線頻繁開啟和關閉,會嚴重影響資料庫的效能。
- 資料庫連線池(全域性配置檔案中)
- 2、程式碼中存在硬編碼,分別是資料庫部分(建立連線)的硬編碼和SQL執行部分的硬編碼。
- 資料庫部分:配置檔案(全域性配置檔案中)
- 和SQL執行部分:配置檔案(對映檔案中)
3、mybatis的框架原理(重點)
3.1、mybatis框架圖
3.2、分析結論
- 1、mybatis配置檔案,包括Mybatis全域性配置檔案和Mybatis對映檔案,其中全域性配置檔案配置了資料來源、事務等資訊;對映檔案配置了SQL執行相關的資訊。
- 2、mybatis通過讀取配置檔案資訊(全域性配置檔案和對映檔案),構造出SqlSessionFactory,即會話工廠。
- 3、通過SqlSessionFactory,可以建立SqlSession即會話。Mybatis是通過SqlSession來操作資料庫的。
- 4、SqlSession本身不能直接操作資料庫,它是通過底層的Executor執行器介面來操作資料庫的。Executor介面有兩個實現類,一個是普通執行器,一個是快取執行器(預設)。
- 5、Executor執行器要處理的SQL資訊是封裝到一個底層物件MappedStatement中。該物件包括:SQL語句、輸入引數對映資訊、輸出結果集對映資訊。其中輸入引數和輸出結果的對映型別包括:java的簡單型別、HashMap集合物件、POJO物件型別。
4、入門程式
- Mybatis課程的所有程式碼程式將通過一個
訂單商品案例
來進行講解。- 訂單商品案例(使用者表)
4.1、需求
- 對使用者資訊的增刪改查操作。
- 1、根據使用者ID來查詢使用者資訊
- 2、根據使用者名稱稱模糊查詢使用者資訊列表
- 3、新增使用者
- 4、刪除使用者(練習)
- 5、修改使用者(練習)
4.2、環境準備
- Jdk環境:jdk1.7.0_80
- Ide環境:Eclipse Oxygen.2 Release (4.7.2)
- 資料庫環境:MySQL 5X
- Mybatis:3.2.7
4.2.1、資料庫初始化
4.2.1.1、資料庫指令碼
1、執行sql_table.sql指令碼,建立資料庫表;
2、執行sql_data.sql初始化測試資料。
4.2.1.2、資料庫表
訂單商品案例的資料庫指令碼中,總共包含四張表,其中入門程式只使用user表:
使用者表的表結構如下:
4.2.2、下載mybatis
- mybaits的程式碼由github.com管理,下載地址:https://github.com/mybatis/mybatis-3/releases
- lib:mybatis的依賴包
- mybatis-3.2.7.jar:mybatis的核心包
- mybatis-3.2.7.pdf:mybatis的使用指南
4.3、工程搭建(三步)
4.3.1、第一步:建立java工程
- 用eclipse建立一個java工程,jdk使用1.7.0_80,新建標準結構:
4.3.2、第二步:加入jar包
- 加入以下四部分jar包,其中junit的jar包,是非必須的。
- Mybatis核心包
- Mybatis依賴包(沒有框框的)
- MySQL驅動包
- Junit單元測試包(單元測試需要的包)
- 之後新增至構建路徑
4.3.3、第三步:新增log4j.properties檔案
Mybatis使用的日誌包是log4j的,所以需要新增log4j.properties。
在classpath下建立log4j.properties如下:
檔案內容可以從mybatis-3.2.7.pdf中拷貝
# Global logging configuration
log4j.rootLogger=debug, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
日誌級別在開發階段設定成debug,在生產階段設定成info或者error。
4.4、程式設計步驟
- 1、建立PO類,根據需求建立;
- 2、建立全域性配置檔案SqlMapConfig.xml;
- 3、編寫對應的對映檔案;
- 4、載入對映檔案,在SqlMapConfig.xml中進行載入;
- 5、編寫測試程式,即編寫Java程式碼,連線並操作資料庫。 思路:
- a) 讀取配置檔案;
- b) 通過SqlSessionFactoryBuilder建立SqlSessionFactory會話工廠
- c) 通過SqlSessionFactory建立SqlSession
- d) 呼叫SqlSession的操作資料庫方法
- e) 關閉SqlSession
4.5、程式碼開發
4.5.1、建立PO類
- 建立的po類的屬性要和資料庫中表的列名一致(如果表中的列名是帶有下劃線,那麼po類中對應的的屬性名要採用駝峰式命名)。
User.java類如下:
public class User {
private int id;
private String username; // 使用者姓名
private String sex; // 性別
private Date birthday; // 生日
private String address; // 地址
// getter和setter方法
4.5.2、建立全域性SqlMapConfig.xml配置檔案
在classpath下,建立SqlMapConfig.xml檔案,該檔名稱不是固定不變的。
SqlMapConfig.xml(檔案頭可以從mybatis-3.2.7.pdf文件的2.1.2小節中拷貝)
:
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置mybatis的環境資訊,後面學習中,與spring整合,該資訊由spring來管理 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事務控制,由mybatis進行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置資料來源,採用mybatis連線池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
4.5.3、需求開發
在config目錄下,建立普通資料夾sqlmap。在sqlmap目錄下,建立User.xml對映檔案(這種命名規範是由ibatis遺留下來)。
Mybatis的對映檔案頭(可以從mybatis-3.2.7.pdf檔案中拷貝)
:
User.xml
相關推薦
day61_Mybatis學習筆記_01
今天內容安排:
1、mybatis的介紹
2、分析原生態jdbc程式中存在的問題
3、mybatis的框架原理(重點)
4、入門程式
訂單商品案例(使用者表)
5、Mybatis開發dao的方
React學習筆記_01
壓縮 替換 log -s 直接 快速構建 使用 cal font 使用Facebook的create-react-app快速構建React開發環境
前言:
create-react-app:來自Facebook官方的零配置命令行工具
create-react-app是
Ajax學習筆記_01
通過 xmlhttp orm imp 函數 java AD 交互 thead
Ajax是一種方法,而不是一種編程語言。語言的話,用js就足夠了。
首先需要創建一個XMLHttpRequest對象,這個對象的方法包括:
abort();
getAllResponseHe
Flask_學習筆記_01
公司有一哥們成立一個Python學習小組,於是果斷加入,雖然講的跳度比較大,但是還是學了點知識的。之前自學過一段時間Python,有點基礎。聽到要講Flask的時候,就有點感興趣了,說是比較輕量級的Web開發框架,嘗試了一下,確實上手比較快。由於也是剛入門,所以沒有資格對其評價,先玩一段時間再說吧。
Fla
Java學習筆記_01
Java程式三步走
原始檔(格式為.java檔案)
編譯器轉化(格式為.class檔案)
直譯器轉化(轉化為機器語言)
第一個java程式
建立檔案javatest.java
編輯程式碼:
public class javates
day45_Webservice學習筆記_01
一、課程安排
Webservice就是一種遠端呼叫技術,它的作用就是從遠端系統中獲取業務資料。
客戶端通過網路通訊協議訪問服務端,網路協議包括TCP和UDP兩大通訊協議: TCP是一種面向連線的協議,提供可靠的資料傳輸,一般服務質量要求比較高的情況,使用這個協議。TCP支援的應用協議主要
day63_SpringMVC學習筆記_01
1、JAVAEE體系結構
JAVAEE體系結構圖如下所示:
2、什麼是springmvc?
什麼是mvc?
Model1
Model2
SpringMVC是什麼?
SpringMVC是一個web層mvc框架,類似struts2。
SpringMVC和
day67_Redis學習筆記_01
課程計劃
1、Redis的介紹
a) 什麼是NoSql
b) NoSql的分類
c) 什麼是Redis
d) Redis的歷史發展
e) Redis的應用場景
2、Redis服務端的安裝(重點)
3、Redis客戶端的使用
a) redis自帶客戶端(命令列)
b)
Robot Operating System (ROS)學習筆記4---語音控制
sla 語音 出現 tput http 學習 process 輸入 ubun 搭建環境:XMWare Ubuntu14.04 ROS(indigo)
轉載自古月居 轉載連接:http://www.guyuehome.com/260
一、語音識別包
1、安裝
MySQL學習筆記(六)—— MySQL自連接
概念 cor 子查詢 ron 表操作 例子 質量 _id order by 有的時候我們需要對同一表中的數據進行多次檢索,這個時候我們可以使用之前學習過的子查詢,先查詢出需要的數據,再進行一次檢索。
例如:一張products表,有產品id,供應商id(vend_
jquery 深入學習筆記之中的一個 (事件綁定)
color 動態 name his pan mouseover this pre con
【jquery 事件綁定】
1、加入元素事件綁定
(1) 加入事件為當前元素
$(‘p‘).on(‘click‘,function(){
//code here ..
AngularJS入門學習筆記一
rect directive 技術分享 attr 兩個 ava 內容 module 大括號 首先聲明:
本博客源自於學習:跟我學AngularJs:AngularJs入門及第一個實例。通過學習,我自己的一些學習筆記。
1.AngularJS的一些基本特性
(1)使用雙大括號
Python學習筆記-2017.5.4
列表 lin 覆蓋範圍 復習 處理 pytho 內部 global txt 本文章記錄學習過程中的細節和心得:
復習所學課程:
1、文件的操作:
打開文件,對文件的操作打開方式有兩種:
第一種:
f = open("test.txt", "r")#以只讀
SAS學習筆記之函數應用
不能 oracle 理解 資料 oracl 函數應用 特殊 put acl
今天在做數據需求的時候遇到一些問題,因為不能夠在數據庫裏面做,僅僅好在SAS裏面實現。這就遇到了一些麻煩,須要使用一些函數實現部分功能,如查找字段中某個特殊字符出現的次數,查找某個字符的位置等,
OpenCV2學習筆記(十五):利用Cmake高速查找OpenCV函數源代碼
one 生成 img log 分享 lan 學習筆記 全部 modules
在使用OpenCV時,在對一個函數的調用不是非常了解的情況下,通常希望查到該函數的官方聲明。而假設想進一步研究OpenCV的函數,則必須深入到源碼。在VS中我們能夠選中想要查
avalonjs 學習筆記1---checkbox
nod item ack lex server ini npm 學習 define 一、vscode 安裝使用
1.vs code+node.js下載安裝
2.在node.js command prompt 中運行 npm install -g live-server
3
Linux學習筆記(三):系統執行級與執行級的切換
查看 用戶操作 回車 water hat ntsysv tde 文件表 config
1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要
Principle of Computing (Python)學習筆記(7) DFS Search + Tic Tac Toe use MiniMax Stratedy
ide out generate depth sku color ati cond with
1. Trees
Tree is a recursive structure.
1.1 math nodes
https://class.coursera.org/prin
Java程序猿的JavaScript學習筆記(12——jQuery-擴展選擇器)
type write number article mat 我們 content ace val
計劃按例如以下順序完畢這篇筆記:
Java程序猿的JavaScript學習筆記(1——理念)
Java程序猿的JavaScript學習筆記(2——屬性復制和繼承)
Jav
java學習筆記——String類
通過 ray [] 原理 log spl 2.3 -s 長度 一、概述
·字符串是一個特殊的對象
·字符串一旦初始化就不可以被改變
·String str = "abc";
·String str1 = new String("abc");
有什麽區別?
package