簡介:
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的步驟
三種查詢方式
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>