1. 程式人生 > >MyBatis的詳細介紹

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的元件

  1. SqlSessionFactoryBuilder(構造器),它會根據程式碼或者配置檔案來生成SqlSessionFactory,採用的是分佈構建的builder模式
  2. SqlSessionFactory(工廠介面),它可以生成SqlSession,採用的是工廠模式
  3. SqlSession會話,它可以傳送Sql語句返回結果,也可以獲取Mapper介面
  4. Sql Mapper(對映器),它由一個java介面和一個XML檔案(獲註解)構成,需要給出對應的SQL和對映規則,它可以傳送sql並返回結果