1. 程式人生 > >Mybatis入門及第一個Mybatis程式

Mybatis入門及第一個Mybatis程式

# Mybatis筆記整理 ## 所需要的基礎知識 > JDBC > > Mysql > > Java基礎 > > Maven > > Junit 框架:是有配置檔案的。最好的方式:**看官網文件** ## 1、簡介 ### 1.1、什麼是MyBatis 簡介 什麼是 MyBatis? ``` MyBatis 是一款優秀的持久層框架 它支援定製化 SQL、儲存過程以及高階對映。 MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。 MyBatis 可以使用簡單的 XML 或註解來配置和對映原生型別、介面和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 物件)為資料庫中的記錄。 ``` 如何獲得MyBatis? ```xml Maven倉庫
org.mybatis mybatis 3.5.3 github:https://github.com/mybatis/mybatis-3/releases 中文文件:https://mybatis.org/mybatis-3/zh/index.html ``` ### 1.2、持久化 資料持久化 ``` 持久化就是將程式的資料在持久狀態和瞬時狀態轉化的過程 記憶體:斷電即失 資料庫(JDBC),io檔案持久化。 生活中:冷藏、罐頭。 ``` 為什麼需要持久化? ``` 有一些物件,不能讓他丟掉。 ``` ### 1.3、持久層 Dao層、Service層、Controller層… ``` 完成持久化工作的程式碼塊 層界限十分明顯 ``` ### 1.4、為什麼需要Mybatis? ``` 幫助程式設計師將資料存入到資料庫中。 方便 傳統的JDBC程式碼太複雜了。簡化、框架、自動化。 不用Mybatis也可以。更容易上手。技術沒有高低之分 優點: 簡單易學 靈活 sql和程式碼的分離,提高了可維護性。 提供對映標籤,支援物件與資料庫的orm欄位關係對映 提供物件關係對映標籤,支援物件關係組建維護 提供xml標籤,支援編寫動態sql。 ``` 最重要的一點:使用的人多! >
Spring > > SpringMVC > > SpringBoot ## 2、第一個Mybatis程式 思路:搭建環境–>匯入Mybatis–>編寫程式碼–>測試! ### 2.1、搭建環境 搭建資料庫 ```sql CREATE DATABASE mybatis; use mybatis; CREATE TABLE user( id INT(20) not null PRIMARY KEY, name VARCHAR(30) DEFAULT NULL, pwd VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO user (id,name,pwd) VALUES (1,'浴血','123456'), (2,'張三','123456'), (3,'李四','123890') ``` 新建專案 ``` 新建一個普通的maven專案 刪除src目錄 匯入maven依賴 ``` 之後建立maven的父工程與子工程 ```xml
4.0.0 com.yuxue Mybatis-study pom 1.0-SNAPSHOT mybatis-01 mysql mysql-connector-java 5.1.47 org.mybatis mybatis 3.5.2 junit junit 4.12 log4j log4j 1.2.17 ``` 子工程 ```xml Mybatis-study com.yuxue 1.0-SNAPSHOT 4.0.0 mybatis-01 ``` ![img](https://i.loli.net/2020/11/29/AUrEg9CwDnu7OeH.png) ### 2.2、建立一個模組 1. 首先在main/resources下建立一個mybatis-config.xml檔案,裡面寫建立資料庫時的配置 ```xml ``` 2. 之後編寫mybatis的工具類utils,目錄為main/java新建package:com.yuxue.utils ```java package com.yuxue.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; /** * @author yuxue * sqlSessionFactory --> sqlSession */ public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try{ //使用mybatis第一步、獲取sqlSessionFactory物件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); }catch(IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顧名思義,我們就可以從中獲得 SqlSession 的例項了。 // SqlSession 完全包含了面向資料庫執行 SQL 命令所需的所有方法。 // 你可以通過 SqlSession 例項來直接執行已對映的 SQL 語句。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } } ``` ### 2.3、編寫程式碼 1. 編寫實體類,目錄為main/java新建package:com.yuxue.pojo,新建一個User類 ```java package com.yuxue.pojo; public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } } ``` 2. 之後編寫Dao當中的程式碼,首先編寫UserMapper的抽象介面,目錄為main/java新建package:com.yuxue.dao ```java package com.yuxue.dao; import com.yuxue.pojo.User; import java.util.List; public interface UserMapper { //查詢所有使用者 List getUserList(); } ``` 3. 之後再Dao資料夾下新建UserMapper.xml檔案對SQL語句進行編寫 ```xml ``` 4. 要讓這個配置檔案在mybatis-config.xml檔案中註冊,於是加上 ```xml ``` 5. 在子工程以及父工程的pom檔案中加上一段話讓其識別資料夾中的xml檔案 ```xml src/main/resources **/*.properties **/*.xml true src/main/java **/*.properties **/*.xml true ``` ### 2.4、測試 使用juint進行測試,在test資料夾下建立package:com.yuxue.UserMapperTest ```java package com.yuxue.dao; import com.yuxue.pojo.User; import com.yuxue.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserMapperTest { @Test public void test(){ //第一步:獲得SqlSession物件 SqlSession sqlSession = MybatisUtils.getSqlSession(); //執行SQL UserMapper mapper = sqlSession.getMapper(UserMapper.class); List userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //關閉SqlSession sqlSession.close(); } } ``` ``` 可能會遇到的問題: 配置檔案沒有註冊 繫結介面錯誤 方法名不對 返回型別不對 Maven匯出資源問題 ``` ![img](https://i.loli.net/2020/11/29/zAKwaIpXTGtxcWf.png) 以上就是我們所寫的第一個Mybatis程式 ## 3、CRUD ### 3.1、namespace namespace中的包名要和dao/mapper介面的包名保持一致 ```xml ``` ### 3.2、select 選擇查詢語句;以下在select語句當中的引數非常重要 > **id:就是對應的namespace中的方法名;** > **resultType:Sql語句執行的返回值!** > **parameterType:引數型別!** 編寫介面 ```java package com.yuxue.dao; import com.yuxue.pojo.User; import java.util.List; public interface UserMapper { //根據id查詢使用者 User getUserById(int id); } ``` 編寫對應的mapper中的sql語句 ```xml ``` 測試 ```java @Test public void getUserById(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); } ``` ![2](https://i.loli.net/2020/11/29/5UERAHvMGWay4nN.png) ### 3.3、Insert ```java //插入一個USER int insertUser(User user); ``` ```xml insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd}) ``` ```java @Test public void insertUserTest(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int number = mapper.insertUser(new User(4, "呵呵", "1454321")); if (number==1){ sqlSession.commit(); } sqlSession.close(); } ``` ### 3.4、Update ```java //修改使用者 int updateUser(User user); ``` ```xml update mybatis.user set name=#{name}, pwd=#{pwd} where id=#{id} ``` ```java @Test public void updateUserTest(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int heihei = mapper.updateUser(new User(4, "heihei", "1454321")); if (heihei==1){ sqlSession.commit(); } sqlSession.close(); } ``` ### 3.5、Delete ```java //刪除使用者 int deleteUser(int id); ``` ```xml delete from mybatis.user where id = #{id} ``` ```java @Test public void deleteUserTest(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.deleteUser(4); if (i==1){ sqlSession.commit(); } sqlSession.close(); } ``` 注意點:增刪改需要提交事務 我們可以發現,現在編寫一條新的SQL語句只用修改三個檔案即可,其他的檔案均不用動,這三個檔案分別是 > 1.UserMapper > > 2.UserMapper.xml > > 3.UserMapperTest ### 3.6、分析錯誤 ``` resource繫結mapper,需要使用路徑! 程式配置檔案必須符合規範 NullPointerException,沒有註冊到資源 輸出的xml檔案中存在中文亂碼問題 maven資源沒有匯出問題 ``` 最終形成的目錄結構以及檔案如下圖所示 ![img](https://i.loli.net/2020/11/29/Qx8Doq49z1ev