一。什麼是MyBatis
MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
上面是MyBatis官方的簡介,我們把這段話說的直白一點,什麼是MyBatis,為什麼要用MyBatis
MyBatis是讓你寫的java程式對資料庫進行增刪改查的一個工具。
java對資料庫進行增刪改查的工具很多,較之於其他工具,mybatis容易上手,而且開發起來也很簡單,同時與spring的組合也非常容易。
目前各大網際網路公司多是使用mybatis。
所以,廢話不多說,我們直接開始吧
二。測試用的資料庫和表
既然是一個對資料庫進行操作的工具,所以,我們首先準備好資料庫和表
三。建立Maven工程
給Maven小白稍微介紹以下,如果熟悉Maven的,你可以看一下2.pom.xml檔案,匯入相關包,或者直接跳過這段內容
1。Maven工程的基本結構
你可以建立一個簡單的java工程進行測試,不過這樣子的話,你需要自己去匯入相關的jar包,不過其實也不多,關鍵的就兩個,一個MySql的連線jar包,一個MyBatis的jar包,不過還是強烈建議大家直接使用Maven工程。
不過可能你還沒有接觸過Maven,無所謂,常用的開發工具IntelliJ IDEA和最新的Eclipse都預設安裝了Maven外掛,直接建立Maven工程就好了
沒使用過Maven工程也無所謂,知道下面兩點,其實我們就可以無障礙的寫程式碼了
日常使用Maven常用的功能其實就是自動幫我們匯入相關的關聯包
Maven是一個工程構建工具,簡單來說,就是我們的Java工程要按照Maven規定的模式建立,java原始檔應該放在什麼位置,配置檔案,測試檔案該放在什麼位置等等都有規定
上面展示的就是一個剛剛建立好的Maven工程的基本結構,接下來,我們在IntelliJ IDEA中建立一個Maven工程
這個樣子建立好之後,就是上面Maven專案第一個截圖的樣子了
2。修改pom。xml檔案,匯入相關包
在
3。查詢相關包的dependency標籤
當然每個包相應的maven標籤是什麼也不用糾結,你可以在maven repository網站中搜索對應的包名就行了
比如你要查詢mybatis的包
搜尋出很多mybatis相關內容,我們只是使用原始的mybatis包,選擇第一個
選擇你需要的mybatis版本,這裡的版本劃分的很細,其實並不重要,你隨便選一個版本都可以
當你修改好pom。xml檔案之後,IntelliJ IDEA會在右下角提示你是否在pom。xml檔案修改後自動匯入相關包
我們選擇
Enable Auto-Import
就可以了
四。MyBatis配置檔案
上面主要是和maven相關的,接下來才是MyBatis最重要的內容
我們要使用MyBatis,肯定需要相關配置,現在主流的其實就兩種XML配置檔案,以及註解配置,我們先來看一下透過XML配置檔案實現的過程
下面是整個工程的結構
1。在resources目錄中加入mybatis-configuration。xml檔案
其實不用我多解釋,大家也看的出來,現在這裡主要配置的是資料庫連線的相關內容,當然現在這裡只是一個很簡單的配置,後面我們還需要做修改
注意
:mysql預設埠是3306,我這裡由於使用了Docker映射出來的埠,所以埠做出了修改,你不必和我一樣
2。定義表所對應的實體類
package com。yingside。bean;public class User {
private int id;
private String userTel;
private String username;
private String password;
private String registrationTime;
public int getId() {
return id; }
public void setId(int id) {
this。id = id; }
public String getUserTel() {
return userTel; }
public void setUserTel(String userTel) {
this。userTel = userTel; }
public String getUsername() {
return username; }
public void setUsername(String username) {
this。username = username; }
public String getPassword() {
return password; }
public void setPassword(String password) {
this。password = password; }
public String getRegistrationTime() {
return registrationTime; }
public void setRegistrationTime(String registrationTime) {
this。registrationTime = registrationTime; }
@Override public String toString() {
return “User{” +
“id=” + id +
“, userTel=‘” + userTel + ’\‘’ +
“, username=‘” + username + ’\‘’ +
“, password=‘” + password + ’\‘’ + “, registrationTime=‘” + registrationTime + ’\‘’ + ‘}’; }}
3。定義操作 t_user 表的sql對映檔案UserMapper。xml
<?xml version=“1。0” encoding=“UTF-8” ?>
<!DOCTYPE mapper PUBLIC “-//mybatis。org//DTD Mapper 3。0//EN” “http://mybatis。org/dtd/mybatis-3-mapper。dtd”>
<!—— 這個XML檔案其實就相當於我們三層架構中的DAO層的實現類xxxDaoImpl,如果拿它跟具有相同功能的 JDBC 程式碼進行對比,你會立即發現省掉了將近 95% 的程式碼。 也就是說,有了這個配置檔案,至少之前原始JDBC中經常出現的Connection,PreparedStatement,ResultSet這些介面不需要你再建立了 當然要編寫這個檔案,需要對
<!—— 為這個mapper指定一個唯一的namespace,namespace的值習慣上設定成包名+sql對映檔名,這樣就能夠保證namespace的值是唯一的例如namespace=“om。yingside。mapper。UserMapper”就是com。yingside。mapper(包名)+UserMapper(UserMapper。xml檔案去除字尾) ——>
4。在mybatis-configuration。xml配置檔案中註冊UserMapper。xml檔案
mybatis-configuration。xml檔案的
<!—— 註冊UserMapper。xml檔案, UserMapper。xml位於com。yingside。mapper這個包下, 所以resource寫成com/yingside/mapper/UserMapper。xml——>
5。建立測試
package com。yingside。test;
import com。yingside。bean。User;
import org。apache。ibatis。session。SqlSession;
import org。apache。ibatis。session。SqlSessionFactory;
import org。apache。ibatis。session。SqlSessionFactoryBuilder;
import org。junit。Before;
import java。io。InputStream;
public class Test { SqlSession sqlSession = null; @Before public void init(){ //mybatis全域性配置檔案 String resource = “mybatis-configuration。xml”; //載入全域性配置檔案 InputStream is = this。getClass()。getClassLoader()。getResourceAsStream(resource); //建立SqlSession工廠 SqlSessionFactory factory = new SqlSessionFactoryBuilder()。build(is); //透過工廠生成sqlSession sqlSession = factory。openSession(); } @org。junit。Test
public void testGetUser(){ /*這個字串由 userMapper。xml 檔案中 兩個部分構成
其實現在已經可以測試運行了,我們試一試,結果列印了下面的內容
User{id=1, userTel=‘null’, username=‘金庸’, password=‘0b4e7a0e5fe84ad35fb5f95b9ceeac79’, registrationTime=‘null’}
User物件確實成功的獲取到了,並且id,username和password屬性都成功的取得,但是userTel和registrationTime卻是null,這明顯是有問題的,不過至少現在已經成功的獲取了資料庫中的內容,其他的問題,我們下期內容再來一一解決。