1. 程式人生 > >IDEA建立MyBatis——初始

IDEA建立MyBatis——初始


一、為什麼需要框架技術

1.框架技術
是一個應用程式的半成品
提供可重用的公共結構
按一定規則組織的一組元件



2.分析優勢
不用再考慮公共問題
專心在業務實現上
結構統一,易於學習、維護
新手也可寫出好程式 

二、MyBatis


1.半自動化的ORM實現
2.DAO層
3.動態SQL
4.小巧靈活、簡單易學


1.持久化與ORM

持久化是程式資料在瞬時狀態和持久狀態間轉換的過程


01.ORM(Object Relational Mapping)
編寫程式的時候,以面向物件的方式處理資料
儲存資料的時候,卻以關係型資料庫的方式儲存


02.ORM解決方案包含下面四個部分
在持久化物件上執行基本的增、刪、改、查操作
對持久化物件提供一種查詢語言或者API
物件關係對映工具
提供與事務物件互動、執行檢查、延遲載入以及其他優化功能

2.MyBatis簡介

*MyBatis前身是iBatis,本是Apache的一個開源的專案
*官方網站
http://mybatis.org
*ORM框架
實體類和SQL語句之間建立對映關係
*特點
基於SQL語法,簡單易學
能瞭解底層封裝過程
SQL語句封裝在配置檔案中,便於統一管理與維護,降低程式的耦合度
方便程式程式碼除錯

3.搭建MyBatis開發環境

使用MyBatis的開發步驟


   a.下載mybatis-3.2.2.jar包並匯入工程
   b.編寫MyBatis核心配置檔案(configuration.xml)
   c.建立實體類-POJO
   d.DAO層-SQL對映檔案(mapper.xml)
   e.建立測試類


          讀取核心配置檔案mybatis-config.xml
          建立SqlSessionFactory物件,讀取配置檔案
          建立SqlSession物件
          呼叫mapper檔案進行資料操作

專案結構如圖所示:


pom.xml

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.31</version>
    </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.4</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> <scope>test</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>

mybatis-config.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>
    <properties resource="database.properties"></properties>
    <typeAliases>

        <package name="cn.happy.entity"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${database.driver}" />
                <property name="url" value="${database.url}" />
                <property name="username" value="${database.username}" />
                <property name="password" value="${database.password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="cn/happy/dao/department.xml"></mapper>
    </mappers>

</configuration>

database.properties  資料庫接連的相關配置
database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/empdb
database.username=root
database.password=


department.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">

<mapper namespace="cn.happy.dao.DeptDao">
    <!--可以重用的SQL塊,也可以被其他語句引用-->
    <sql id="columns">
        id,name
    </sql>
    <!--用來描述資料庫結果集和物件的對應關係-->

    <!-- 1.查詢所有部門-->
    <select id="getAllDept" resultType="Department">
        select <include refid="columns"></include> from department
    </select>
</mapper>

DepartmentTest     部門測試類
  @Test
    public void deptTest() throws IOException {
        String resource="mybatis-config.xml";
        InputStream stream= Resources.getResourceAsStream(resource);
        //獲得會話工廠
        SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(stream);
        //會話
        SqlSession session=sf.openSession();
        //01.弱型別  通過名稱空間唯一鎖定要執行的sql
       // List<Department> list = session.selectList("cn.happy.dao.getAllDept");
        //02.強型別
        DeptDao dao = session.getMapper(DeptDao.class);
        List<Department> list = dao.getAllDept();
        for (Department item:list){
            System.out.println(item.getName());
        }
        session.close();

    }

實現思路:

1、 mybatis配置 mybatis-config.xml,此檔案作為mybatis的全域性配置檔案,配置了mybatis的執行環境等資訊。 mapper.xml檔案即sql對映檔案,檔案中配置了操作資料庫sql語句。此檔案需要在mybatis-config.xml中載入。

2、 通過mybatis環境等配置資訊構造SqlSessionFactory即會話工廠 3、 由會話工廠建立sqlSession即會話,操作資料庫需要通過sqlSession進行。 4、 mybatis底層自定義了Executor執行器介面操作資料庫,Executor介面有兩個實現,一個是基本執行器、一個是快取執行器。 5、 Mapped Statement也是mybatis一個底層封裝物件,它包裝了mybatis配置資訊及sql對映資訊等。mapper.xml檔案中一個sql對應一個Mapped Statement物件,sql的id即是Mapped statement的id。 6、 Mapped Statement對sql執行輸入引數進行定義,包括HashMap、基本型別、pojo,Executor通過Mapped Statement在執行sql前將輸入的Java物件對映至sql中,輸入引數對映就是jdbc程式設計中對preparedStatement設定引數。 7、 Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本型別、pojo,Executor通過Mapped Statement在執行sql後將輸出結果對映至java物件中,輸出結果對映過程相當於jdbc程式設計中對結果的解析處理過程。

輸出對映(返回的結果集可以有哪些型別)

1)基本型別

2)pojo型別

3)List型別

3.MyBatis框架優缺點

優點
與JDBC相比,減少了50%以上的程式碼量
最簡單的持久化框架,小巧並簡單易學
SQL程式碼從程式程式碼中徹底分離,可重用
提供XML標籤,支援編寫動態SQL
提供對映標籤,支援物件與資料庫的ORM欄位對映
缺點
SQL語句編寫工作量大,對開發人員有一定要求
資料庫移植性差

MyBatis專注於SQL本身,是一個足夠靈活的DAO層解決方案,適用於效能要求較高或者需求多變的網際網路專案

4.MyBatis基本要素

01.MyBatis的核心物件  SqlSessionFactoryBuilder 、  SqlSessionFactory 、SqlSession
02.mybatis-config.xml  系統核心配置檔案
03.mapper.xml  SQL對映檔案

核心物件:

1.SqlSessionFactoryBuilder
用過即丟,其生命週期只存在於方法體內
可重用其來建立多個 SqlSessionFactory 例項
負責構建SqlSessionFactory,並提供多個build方法的過載

2.SqlSessionFactory
SqlSessionFactory是每個MyBatis應用的核心
作用:建立SqlSession例項
作用域:Application
生命週期與應用的生命週期相同
單例
存在於整個應用執行時,並且同時只存在一個物件例項

3.SqlSession
包含了執行SQL所需的所有方法
對應一次資料庫會話,會話結束必須關閉
執行緒級別,不能共享

注意:在SqlSession裡可以執行多次SQL語句,但一旦關閉了SqlSession就需要重新建立

SqlSession的兩種使用方式
01.通過SqlSession例項直接執行對映的SQL語句
02.基於Mapper介面方式操作資料

mybatis-config.xml 系統核心配置檔案


a.配置properties元素的兩種方式
1.通過外部指定的方式(database.properties),實現動態配置
2.直接配置為xml,實現動態配置

b.Setting元素

用來修改MyBatis執行時的行為方式
主要是MyBatis的一些全域性配置屬性的設定


c:typeAliases元素

類型別名
僅僅只關聯XML配置,簡寫冗長的Java類名

//方式一
<typeAliases>
	<typeAlias alias="User" type="cn.smbms.pojo.User"/>
</typeAliases>

//方式二:
<typeAliases>
	<package name ="cn.smbms.pojo" />
</typeAliases>

d:environments元素

表示配置MyBatis的多套執行環境,將SQL對映到多個不同的資料庫上
子元素節點:environment,但是必須指定其中一個為預設執行環境(通過default指定)


transactionManager-事務管理器


dataSource
dataSource元素使用基本的JDBC資料來源介面來配置JDBC連線物件的資源
有三種內建的資料來源型別


e:mappers元素


5.MyBatis與Hibernate的區別