MyBatis項目已托管到GitHub,大家可以去GitHub查看下載!並搜索關註微信公眾號 碼出Offer 領取各種學習資料! 一、框架概述 1.1 什麼是框架? 軟體的半成品,解決了軟體開發過程當中的普適性問題,從而簡化了開發步驟,提供了開發的效率 1.2 什麼是ORM框架? ORM(Objec ...
項目已托管到GitHub,大家可以去GitHub查看下載!並搜索關註微信公眾號 碼出Offer 領取各種學習資料!
一、框架概述
1.1 什麼是框架?
軟體的半成品,解決了軟體開發過程當中的普適性問題,從而簡化了開發步驟,提供了開發的效率
1.2 什麼是ORM框架?
ORM(Object Relational Mapping)對象關係映射,將程式中的一個對象與表中的一行數據一一對應
ORM框架提供了持久化類與表的映射關係,在運行時參照映射文件的信息,把對象持久化到資料庫中
1.3 使用JDBC完成ORM的缺點
存在大量的冗餘代碼
手工創建 Connection、Statement 等
手工將結果集封裝成實體對象
查詢效率低,沒有對數據訪問進行過優化(Not Cache)
二、MyBatis概述
2.1 什麼是MyBatis
MyBatis本是Apache軟體基金會的一個開源項目iBatis,2010年這個項目由apache software foundation 遷移到了Google Code,並且改名為MyBatis。2013年11月遷移到Github。MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或註解來配置和映射原始類型、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為資料庫中的記錄
2.2 官網
官方網站:http://www.mybatis.org/mybatis-3/
下載地址:https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.1
2.3 使用
關於對MyBatis的使用,我們創建的Maven項目是不需要下載MyBatis的,而是可以通過在Maven項目中的pom文件中添加MyBatis依賴使用!後續我會把MyBatis的開發流程奉上!
三、搭建MyBatis項目
3.1 創建一個Maven項目
File -> NewProject |
---|
創建Maven項目 |
3.2 導入MyBatis依賴
在pom.xml文件中添加MyBatis核心依賴和MyBatis Log(日誌)依賴
- 核心依賴即是使用MyBatis必備依賴環境,必須導入
- MyBatis Log(日誌)依賴可以查看MyBatis啟動的過程,便於我們糾錯、查Bug
註意: 記得把依賴放在<dependecies>標簽內,MyBatis必定是與資料庫交互的,所以也需要導入mysql驅動依賴
<!--MyBatis核心依賴-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--日誌依賴-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--MySql驅動依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
3.3 創建MyBatis配置文件
創建名為
mybatis-config.xml
配置文件並配置以下信息註意: 目前mapper.xml預設建議存放在resources中,路徑不能以/開頭,後續我會補全到其他配置方法
<?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">
<!--MyBatis配置-->
<configuration>
<!--JDBC環境配置、選中預設環境-->
<environments default="MySqlDB">
<!--MySql資料庫環境配置-->
<environment id="MySqlDB">
<!--事務管理-->
<transactionManager type="JDBC"/>
<!--連接池-->
<dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- &轉義& -->
<property name="url" value="jdbc:mysql://localhost:3306/x?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--Mapper註冊-->
<mappers>
<!--註冊Mapper文件的所在位置-->
<mapper resource="xxxMapper.xml"/>
</mappers>
</configuration>
3.4 建表
創建一張表來實現對資料庫的操作
create table tb_user
(
id int auto_increment
primary key,
username varchar(30) null,
password varchar(30) null,
gender char null,
birth date null
) charset = utf8;
3.5 書寫實體類代碼
這裡我是用的Lombok插件使用註解來完成Getter、Setter方法和無參、有參構造
package com.mylifes1110.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private Boolean gender;
private Date birth;
}
3.6 定義Dao層介面
定義一個Dao層介面並編寫一個查詢方法
註意: 因為我們使用MyBatis框架,所以我們不需要來創建Dao層的實現類了
package com.mylifes1110.dao;
import com.mylifes1110.bean.User;
public interface UserDao {
User selectUserById(int id);
}
3.7 創建並編寫Mapper.xml
MyBatis框架是使用Mapper.xml文件來將對象和sql關係映射的,所以我們先在resources文件夾中創建一個
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">
<!--namespace:所需實現的介面全限定名-->
<mapper namespace="com.mylifes1110.dao.UserDao">
<!--id:所需重寫的介面抽象方法;resultType:查詢後所需返回的對象類型-->
<select id="selectUserById" resultType="com.mylifes1110.bean.User">
<!--select標簽是查詢標簽,裡面包裹著查詢的sql語句,其中id = #{arg0}是id = ?的意思-->
<!--#{arg0}是指id等於方法中第一個形參,也就是id-->
select id, username, password, gender, birth from tb_user where id = #{arg0}
</select>
</mapper>
3.7 註冊Mapper
將mapper.xml註冊到mybatis-config.xml核心配置中
<!--Mapper註冊-->
<mappers>
<!--註冊Mapper文件的所在位置-->
<mapper resource="xxxMapper.xml"/>
</mappers>
3.8 測試方式1(常用)
package com.mylifes1110.dao;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class UserMapperTest {
@Test
public void selectUserByIdTest() throws IOException {
// 獲得讀取MyBatis核心配置文件的流對象
InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
// 根據流對象構建SqlSession連接對象的工廠
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
// 通過工廠獲得連接對象sqlSession
SqlSession sqlSession = factory.openSession();
// 通過連接對象獲得介面實現類對象
UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
// 列印結果
System.out.println(userDaoImpl.selectUserById(1));
}
}
3.9 測試方式2(瞭解)
package com.mylifes1110.dao;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class UserMapperTest {
@Test
public void selectUserByIdTest2() throws IOException {
// 獲得讀取MyBatis核心配置文件的流對象
InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
// 根據流對象構建SqlSession連接對象的工廠
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
// 通過工廠獲得連接對象sqlSession
SqlSession sqlSession = factory.openSession();
// 通過連接對象直接調用介面中的方法
Object o = sqlSession.selectOne("com.mylifes1110.dao.UserDao.selectUserById", 1);
// 列印結果
System.out.println(o);
}
}
四、MyBatis框架使用細節
4.1 解決mapper.xml存放在resources以外路徑中的讀取問題
在Maven項目中resources目錄中的配置文件是不會被載入編譯到classes中的,所以如果我們要將mapper.xml文件放在resources文件夾以外的文件夾就不會被編譯到,以至於我們的MyBatis使用不了!
問題解決: 為瞭解決此問題,我們可以