前言
從今天開始,我們將開啟SSM框架的學習,讓我們先了解一下什么是MyBatis?
1.簡介
-
持久層框架
-
幾乎避免了所以JDBC代碼和手動設定引數以及獲取結果集
使用了ORM思想,實作了結果集的封裝
-
ORM:object Relational Mapping 物件關系映射
把資料庫表和物體類以及物體類的屬性對應起來
讓我們可以操作物體類就實作操作資料庫表
2.Mybatis環境搭建
在用idea創建Maven的時候,要在pom.xml中匯入依賴:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
依賴可以在maven的倉庫或者Mybatis的官網(https://mybatis.org/mybatis-3/zh/getting-started.html)里面找到,
注意:因為是使用JDBC連接MySQL資料庫,所以這里還要匯入一個MySQL的依賴,和JDBC連接MySQL一樣的,
創建MyBatis專案的步驟:
- 創建maven工程,并匯入坐標(默認已經創建了資料庫和表)
- 創建mybatis的主組態檔mybatis-config.xml
- 創建資料庫組態檔db.properties
- 創建物體類和Dao的介面
- 創建映射組態檔,UserMapper.xml
- 測驗
這里還加了一個Junit的單元測驗依賴,方便功能測驗
<dependencies>
<!-- mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
在build中配置resources來防止我們資源匯出失敗問題
<!-- 在build中配置resources來防止我們資源匯出失敗問題-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
按如下目錄創建包:

注意:
dao層是存放介面
pojo層是存放物體類
utils層是存放一些加載properties檔案的和配置的工具類
test測驗中的目錄結構最好和dao的目錄結構一致
創建資料庫:
create database db5;
use db5;
create table user
(
`id` int primary key comment '編號',
`username` varchar(20) comment '用戶名',
`password` varchar(20) comment '密碼'
)engine=innodb default charset=utf8
insert into user(id,username,password) values(1,'admin','1234')

一、在resource目錄下創建組態檔
1.mybatis-config.xml
<?xml version="1.0" encoding="utf8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<package name="com.demo.dao.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 系結介面-->
<mappers>
<mapper class="com.demo.dao.UserMapper"/>
</mappers>
</configuration>
注意:
1.這個是加載資料庫組態檔db.properties
<properties resource="db.properties"/>
2.這里面是標準的日志設定,和設定有關的放<settings></settings>中
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
3.這個是包掃描下路徑的別名(在后面UserMapper.xml中會用到)
<typeAliases>
<package name="com.demo.dao.pojo"/>
</typeAliases>
順序是這個,不要搞錯了!!!
環境設定
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
這里我們也可以看到,Mybatis是在JDBC以及連接池的基礎上進行封裝處理,還記得我們前面簡介中提到的“幾乎避免了所以JDBC代碼和手動設定引數以及獲取結果集”
最重要的是<mappers></mappers>
<mappers>
<mapper class="com.demo.dao.UserMapper"/>
</mappers>
加載的Mapper就是這個路徑
2.db.properties
這里就是對資料庫的配置(資料庫驅動、url、username、password)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db5?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456

二、在idea剛剛創建的包下創建物體類和介面
1.pojo包下 創建user的物體類:
package com.demo.pojo;
/**
* @author: seh
* @date: 2020/10/25 9:04
* @version: 1.0
*/
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
2.在dao層創建介面:UserMapper
(可以創建UserMapper.xml,也可以使用注解的方式)
dao層主要是放一些功能的介面(CURD)
package com.demo.dao;
import com.demo.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author: seh
* @date: 2020/10/25 9:06
* @version: 1.0
*/
public interface UserMapper {
// 創建一個查詢方法
@Select("select * from user where id = #{id}")
List<User> queryUserById(@Param("id") int id);
}
注意:
@Select是用于查詢
@Param(“id”)是引數名,和#{id}對應,基本資料型別中最好使用這個注解
回傳值型別是一個List集合型別
3.創建MyBatisUtils的工具類
創建工具類的主要目的是通過呼叫工具類中的方法完成一些配置
package com.demo.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: seh
* @date: 2020/10/14 18:50
* @version: 1.0
*/
/*
* 工具類
*
* */
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
// 1.獲取SqlSessionFactory物件
try {
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(true);//自動提交事務
}
}
這么配置的原因是,根據mybatis官網的配置要求,構建 SqlSessionFactory,SqlSessionFactory 的實體可以通過 SqlSessionFactoryBuilder,
而 SqlSessionFactoryBuilder 則可以從 XML 組態檔或一個預先配置的 Configuration 實體來構建出 SqlSessionFactory 實體,
從 XML 檔案中構建 SqlSessionFactory 的實體非常簡單,建議使用類路徑下的資源檔案進行配置, 但也可以使用任意的輸入流(InputStream)實體,比如用檔案路徑字串或 file:// URL 構造的輸入流,MyBatis 包含一個名叫 Resources 的工具類,它包含一些實用方法,使得從類路徑或其它位置加載資源檔案更加容易,
最后得到如下的目錄以及檔案結構

環境搭建的注意事項:
- 在mybatis中它把持久層的操作介面名稱和映射檔案也叫Mapper
- 在idea中創建目錄的時候,和包不一樣,包是三級目錄,目錄是一級
- mybatis的映射檔案位置必須和dao介面的包結構相同
三、創建測驗類,進行測驗

package com.demo.dao;
import com.demo.pojo.User;
import com.demo.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
/**
* @author: seh
* @date: 2020/10/25 9:13
* @version: 1.0
*/
public class TestCode {
@Test
public void TestQuery(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.queryUserById(1);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
注意:
1.在使用完資源以后記得關閉:sqlSession.close();
2.getMapper方法是利用了反射的機制,對Mapper進行掃描
最后我們來看看日志列印的結果是什么

按照以上步驟,我們創建一個插入的方法
1.在UserMapper中申明一個方法:insertUser(Map map);
package com.demo.dao;
import com.demo.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/**
* @author: seh
* @date: 2020/10/25 9:06
* @version: 1.0
*/
public interface UserMapper {
// 創建一個查詢方法
@Select("select * from user where id = #{id}")
List<User> queryUserById(@Param("id") int id);
//創建一個插入的方法
@Insert("insert into user(id,username,password) values(#{id},#{username},#{password})")
int insertUser(Map map);
}
這里引數使用的是Map型別,比較萬能,推薦使用!
為什么方法回傳的是int型別呢?
這就和JDBC有關了,回憶一下,在JDBC中我們的修改,洗掉和插入回傳的值是不是都是int型別呢?
這里的回傳值表示影響的行數
2.在測驗類中創建一個測驗方法
package com.demo.dao;
import com.demo.pojo.User;
import com.demo.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
/**
* @author: seh
* @date: 2020/10/25 9:13
* @version: 1.0
*/
public class TestCode {
@Test
public void TestQuery(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.queryUserById(1);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void insertUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap map = new HashMap();
map.put("id",2);
map.put("username","user1");
map.put("password","1234");
mapper.insertUser(map);
sqlSession.close();
}
}
查看日志列印結果

查看資料庫

我們確實已經插入成功了!!!
最后,我們再來創建一個查詢全部用戶的方法
1.在userMapper中,申明一個findAll()方法
@Select("select * from user")
List<User> findAll();
2.在TestCode測驗類中,創建測驗方法
@Test
public void findAll(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> list = mapper.findAll();
for (User user : list) {
System.out.println(user);
}
sqlSession.close();
}
3.查看日志列印的結果

本文描述了Mybatis的作用以及如何創建一個簡單的MyBatis專案,在后續的文章中將介紹如何使用UserMapper.xml以及日志、快取、MyBatis-Plus等內容,請持續關注!!!
獲取本節內容的原碼以及更多寶貴的編程資源,請關注:

求一鍵三連!!!QAQ
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/193499.html
標籤:其他
