MyBatis中文官網:https://mybatis.org/mybatis-3/zh/getting-started.html
MyBatis是支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架;
MyBatis封裝了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索;MyBatis來做配置和定義映射關係,將Java的 POJOS( Plain Old Java Objects)映射成數據庫中的記錄。
MyBatis與JDBC比較:
減少了62%的代碼量,最簡單的持久化框架,架構級性能增強,SQL代碼從程序代碼中徹底分離、可重用,增強了項目中的分工,增強了移植性。
MyBatis體系結構:
1.加載配置:
配置有兩種形式,一種是XML配置文件,另一種是Java代碼的註解。MyBatis 將SQL的配置信息加載成爲一個個的MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置)並將其存儲在內存中。
2.SQL解析:
當API接口層接收到調用請求時,會接收到傳入SQL的ID和傳入對象(可以是 Map、JavaBean或者基本數據類型),MyBatis會根據SQL的ID找到對應的 MappedStatement,根據傳入參數對象對MappedStatement進行解析,解析後可以得到最終要執行的SQL語句和參數。
3.SQL執行:
將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。
4.結果映射:
將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、 JavaBean或者基本數據類型,並將最終結果返回。
MyBatis配置文件:
MyBatis框架的XML配置文件包含下面兩種類型:
1. SqlMapConfig.xml: 主配置文件,用於指定數據庫連接參數和框架參數。
2. SqlMap.xml: 映射定義文件,用於定義SQL語句和映射信息。
使用MyBatis框架時,主要涉及的API:
1.SqlSessionFactoryBuilder:
該對象負責根據MyBatis配置文件SqlMapConfig.xml構建SqlSessionFactory實例。
2.SqlSessionFactory:
每一個MyBatis的應用程序都以一個SqlSessionFactory對象爲核心,該對象負責創建SqlSession對象實例。
3.SqlSession:
該對象包含了所有執行SQL操作的方法,用於執行已映射的SQL語句。
搭建MyBatis環境:
在使用MyBatis之前,需要將MyBatis添加到工程項目中,主要步驟如下:
1. 爲工程添加MyBatis開發包和數據庫驅動包;
2. 在src下添加MyBatis配置文件mybatis-config.xml;
3. 配置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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="ZCY"/>
<property name="password" value="ZCY"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/> -->
<mapper resource="Mapper/AdminInfoMapper.xml"/>
</mappers>
</configuration>
4. 利用MyBatis API編程,獲取SqISession實例。
public class Demo {
public static void main(String[] args) {
InputStream ips=Demo.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(ips);
SqlSession session= factory.openSession();
AdminInfoMapper mapper= session.getMapper(AdminInfoMapper.class);
//分頁
List<AdminInfo> admins=mapper.selectByPage(new RowBounds(0,1));
System.out.println(admins);
session.close();
}
}
通過SqlSession實現CRUD操作:
當獲取SqISession對象後,就可以通過它對數據表執行增刪改査操作,使用步驟如下:
1. 根據數據表編寫實體類(JavaBean)
public class AdminInfo {
private Long adminId;
private String adminName;
private String adminPwd;
private Long adminStatus;
private Date adminCtime;
private Long roleId;
}
2. 編寫AdminInfoMapper.xml映射文件,定義SQL操作和映射信息
public interface AdminInfoMapper {
//查詢一共有多少個用戶數據
Integer count();
//查詢所有的用戶
List<AdminInfo> selectAll();
//將密碼修改成654321
Integer updatePwd();
//將對應的用id的密碼進行修改
Integer updatePwd2(@Param("aaa") Long adminId,@Param("bbb") String pwd);
//按條件查詢
List<AdminInfo> selectByParam(@Param("aaa") String name,@Param("bbb") Integer state);
//查詢所有並且分頁
List<AdminInfo> selectByPage(RowBounds row);
}
映射文件:
<?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:命名控件,對應接口類的權限定名 -->
<mapper namespace="Mapper.AdminInfoMapper">
<!-- 常用標籤:select,delete,update,update -->
<!-- select默認屬性:id,就是對應接口類的方法名稱,resultType:返回值類型 -->
<select id="count" resultType="int">
<!-- 不要使用分號 -->
select count(0) from admin_info
</select>
<!-- -->
<resultMap type="bean.AdminInfo" id="AdminInfoMap">
<id column="ADMIN_ID" property="adminId"/>
<id column="ADMIN_NAME" property="adminName"/>
<id column="ADMIN_PWD" property="adminPwd"/>
<id column="ADMIN_STATUS" property="adminStatus"/>
<id column="ADMIN_CTIME" property="adminCtime"/>
<id column="ROLE_ID" property="roleId"/>
</resultMap>
<!-- 注意這裏的返回值類型應該是resultMap,對應的值是resultMap標籤的Id -->
<select id="selectAll" resultMap="AdminInfoMap">
<!-- 不要使用分號 -->
select * from admin_info
</select>
<!-- 增刪改不需要寫返回值 -->
<update id="updatePwd">
</update>
<!-- 按條件查詢 -->
<select id="selectByPage" resultMap="AdminInfoMap">
select * from admin_info
</select>
</mapper>
3. 獲取SqlSession對象,調用其API執行增刪查改操作
4. 增刪改要記得提交事務
5. 釋放SqlSession對象資源
SqlSession的API:
1. 插入一條實體對象 :insert("SQL-ID" ,Bean);
2. 通過條件刪除一條數據 :delete("SQL-ID" ,刪除條件);
3. 通過條件查詢返回一條數據 :selectOne("SQL-ID" ,查詢條件);
4. 更新數據 :update("SQL-ID" ,Bean);
5. 查詢多條數據返回集合對象:selectList("SQL-ID");
MyBatis實現分頁查詢:
1. MyBatis提供一個RowBounds類型,在查詢時指定RowBounds參數對象可以控制抓取記錄的起點和條數。
2. RowBounds rb = new RowBounds(offset,limit)。
3. 配合selectByPage重寫方法進行分頁查詢。
//查詢所有並且分頁
List<AdminInfo> selectByPage(RowBounds row);
//分頁
List<AdminInfo> admins=mapper.selectByPage(new RowBounds(0,1));
System.out.println(admins);
session.close();