MyBatis的詳細介紹
一、mybatis的簡介
mybatis前身叫iBatis,本是Apache的一個開源專案,2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis。MyBatis是支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC 程式碼和引數的手工設定以及結果集的檢索。MyBatis使用簡單的XML或者註解用於配置和原始對映,將介面和java的POJO對映成資料庫的記錄。
MyBatis的功能架構分為三層:
-
API介面層:提供給外部使用的介面API,開發人員通過這些本地API來操縱資料庫。
-
資料處理層:負責具體的SQL查詢,SQL解析,SQL執行和執行結果對映處理等。
-
基礎支撐層:負責最基礎的功能支撐,包括連線管理,事務管理,配置載入和快取處理,這些公用的東西,將他們抽取出來做為最基礎的元件,為上層提供最基礎的支撐。
二、程式碼(新增使用者)
1. 建立一個專案 (maven專案)
2. 記住 : maven專案建立好之後一定要初始化才可以
pom配置檔案
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.siji</groupId> <artifactId>mubatis</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <!-- 專案編碼 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 編譯及輸出的時候應用那個版本的jdk --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--連線資料庫--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!--單元測試--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies> </project>
3. 建立實體類
User
package com.itsiji.entity; import java.io.Serializable; import java.util.Date; /* * 使用者表 */ public class User implements Serializable{ private static final long serialVersionUID = 1L; private Integer id; private String username; private Date birthday; private String sex; private String address; public User() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address=" + address + "]"; } }
4.DAO介面中編寫相應方法
package com.itsiji.dao;
import com.itsiji.entity.User;
/*
* 新增方法 每次新增一個使用者
* @return 返回受影響行數 新增成功 返回1 新增失敗 返回0
* @throws Exception 報錯宣告
*/
public interface UserDao {
public int insertUser(User user)throws Exception;
}
因為我們沒有實現類所以沒有地方寫SQL語句,那這個時候我們可以選擇註解或者XML來編寫SQL語句
5.編寫xml檔案 定義一個和介面名稱一樣的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">
<!--dao層的介面需要與sql語句喲一種對映關係 -->
<!--namespace幫助與介面繫結 -->
<mapper namespace="com.itsiji.dao">
<!--
專門用來進行查詢sql語句的編寫
<select id="指定到介面中的方法名" parameterType="方法引數型別" resultType="方法的返回值">
select * from user
</select>
-->
<insert id="insertUser" parameterType="com.itsiji.dao.User">
insert into user
(USERNAME,BIRTHDAY,SEX,ADDRESS)
values
(#{username},#{birthday},#{sex},#{address})
</insert>
</mapper>
5.1.方法名 和 XML標籤的id值保持一致
5.2. 如果方法有引數 XML中請使用parameterType設定這個屬性的型別
5.3. 如果是新增 刪除 修改都能返回受影響行數(int) 但是這個int值不需要你設定mybatis自己幫你拿到這個返回值
6.建立mybaits的配置檔案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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatisdb?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 註冊介面 -->
<!-- 因為介面方法中應用了mybatis,所以得讓mybatis知道-->
<mappers>
<mapper class="com.itsiji.dao.UserDao"></mapper>
</mappers>
</configuration>
6.1. 介面名 和 對映檔案的名 必須一致
6.2. 介面中的方法命名 和 對映配置中的標籤的ID必須一致
6.3. 對映檔案的XML的namespace屬性必須指定介面的類的全限定名稱
三、mybatis的元件
- SqlSessionFactoryBuilder(構造器),它會根據程式碼或者配置檔案來生成SqlSessionFactory,採用的是分佈構建的builder模式
- SqlSessionFactory(工廠介面),它可以生成SqlSession,採用的是工廠模式
- SqlSession會話,它可以傳送Sql語句返回結果,也可以獲取Mapper介面
- Sql Mapper(對映器),它由一個java介面和一個XML檔案(獲註解)構成,需要給出對應的SQL和對映規則,它可以傳送sql並返回結果