簡介:

  1、Mybatis  開源免費框架,原名叫iBatis,2010在google code,2013年遷移到github

  2、作用: 資料訪問層框架

    2.1  底層是對JDBC的封裝

  3、mybatis優點之一:

    3.1 使用mybatis時,不需要編寫實現類,只需要寫需要執行的sql命令。

環境搭建:

  1、匯入jar                   (之前把mysql的驅動包放入tomcat中了,所有在這裡沒有匯入mysql驅動包)

       

  2、在src下新建全域性配置檔案(編寫JDBC四個變數)

     2.1 在src目錄下新建xml檔案  (src/mybatis.xml)

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration                  2-4是引入遠端的DTD檔案,進行程式碼的提示
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- default引用environment的id,當前所使用的環境 -->
<environments default="default">
<!-- 宣告可以使用的環境 -->
<environment id="default">
<!-- 使用原生JDBC事務 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 資料庫的連線池 -->               配置JDBC四個變數
<dataSource type="POOLED">         
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="362222"/>
</dataSource>
</environment>
</environments>
21 <mappers>
22        <mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/>
23    </mappers>  
</configuration>

   3、新建以mapper結尾的包,在包下新建:實體類名+Mapper.xml 的檔案

    3.1  檔案的作用: 編寫需要執行的SQL語句

    3.2  把xml理解成實現類

        實現過程是:mybatis底層將xml檔案解析反射成實現類進行資料操作  

    3.3  配置過程    (com/bjsxt/mapper/FlowerMapper.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">
<!-- namesapce:理解成實現類的全路徑(包名+類名) -->
<mapper namespace="a.b">
<!-- id:方法名
parameterType:定義引數型別
resultType:返回值型別 如果方法返回值是list,在resultType中寫List的泛型,因為mybatis對
jdbc封裝,一行一行讀取資料
-->                 通過反射找到自定義的類  (查詢的是List集合,為什麼型別是自定義的類??因為底層是對JDBC封裝的(ResultSet一次只能讀取一行資料),一行資料是一個實體類)
<select id="sellAll" resultType="com.bjsxt.pojo.Flower">
select * from flower
</select>
</mapper>

   4、測試結果(只有在單獨使用mybatis時使用,最後ssm整合時下面程式碼不需要編寫)

    4.1 新建一個包一個類進行測試

      

 package com.bjsxt.test;

 import java.io.IOException;
import java.io.InputStream;
import java.util.List; 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 com.bjsxt.pojo.Flower; public class Test {
public static void main(String[] args) {
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis.xml"); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//使用工廠設計模式
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
//生產SqlSession    SqlSession 封裝了mybatis中所有的sql命令
SqlSession session=factory.openSession(); List<Flower> list = session.selectList("a.b.sellAll");
for(Flower flower:list){
System.out.println(flower.toString());
}
session.close();
}
}

  檔案目錄

        

環境搭建詳解:

  1、全域性配置檔案中內容

      1.1  <transactionManager/> type 屬性可取值

        1.1.1 JDBC事務管理使用JDBC原生事務管理方式

        1.1.2 MANAGED 把事務管理轉交給其他容器  (spring使用)

                 原生JDBC事務 setAutoMapping(false);

       1.2  <dataSouce/> type屬性

        1.2.1 POOLED 使用資料庫連線池

        1.2.2 UNPOOLED  不使用資料庫連線池,和直接使用JDBC一樣

        1.2.3 JNDI : java命名目錄介面技術,(使用java通過介面呼叫別的語言程式)

資料庫連線池

      1、在記憶體中開闢一塊空間,存放多個數據庫連線物件。

      2、JDBC Tomcat Pool 直接由tomcat產生資料庫連線池

      3、圖示

        3.1 active 狀態:當前連線物件被應用程式使用中

        3.2 ldle 空閒狀態:等待應用程式使用

        

      4、使用資料庫連線池的目的

         4.1  在高頻率訪問資料庫時,使用資料庫連線池可以降低伺服器系統壓力,提升程式執行效率。

          4.1.1 小型專案不適用資料庫連線池

      5、實現JDBC tomcat Pool的步驟

            https://www.cnblogs.com/axu521/p/10056835.html    

 三種查詢方式

    1、select()  返回值為List<resultType 屬性控制>

      1.1  適用於查詢結果都需要遍歷的需求

 下面這是Test測試
1 List<Flower> list = session.selectList("a.b.sellAll");
for(Flower flower:list){
System.out.println(flower.toString());
} 下面只是FlowerMapper.xml檔案
     <select id="sellAll" resultType="com.bjsxt.pojo.Flower">
         select * from flower
     </select>

      2、selectOne()  返回值Object

      2.1 適用於返回結果只是變數或一行資料時

  下面這是Test測試
1 int i=session.selectOne("a.b.selById");
System.out.println(i);   下面這是FlowerMapper.xml檔案中
     <select id="selById" resultType="int">
         select count(*) from flower
     </select>

    3、selectMap()  返回值 Map

      3.1 適用於需求需要在查詢結果中通過某列的值取到這行資料的需求

      3.2 Map<Key,resultType控制>

   下面這是Test測試    
//把資料庫中哪個列的值當做map的key
Map<Object, Object> map = session.selectMap("a.b.c","name");
System.out.println(map);

  下面這是FlowerMapper.xml檔案中
   <select id="c" resultType="com.bjsxt.pojo.Flower">
     select * from flower
     </select>