MyBatis與JDBC

       MyBatis中文官網:https://mybatis.org/mybatis-3/zh/getting-started.html

       MyBatis是支持普通SQL查詢存儲過程高級映射優秀持久層框架

       MyBatis封裝了幾乎所有的JDBC代碼參數的手工設置以及結果集的檢索MyBatis來做配置定義映射關係,將JavaPOJOS( Plain Old Java Objects)映射成數據庫中的記錄

 

MyBatis與JDBC比較:

     減少了62%的代碼量,最簡單的持久化框架,架構級性能增強,SQL代碼從程序代碼中徹底分離、可重用,增強了項目中的分工,增強了移植性。

MyBatis體系結構:

1.加載配置:

      配置有兩種形式,一種是XML配置文件,另一種是Java代碼的註解。MyBatis 將SQL的配置信息加載成爲一個個的MappedStatement對象(包括了傳入參數映射配置執行的SQL語句結果映射配置)並將其存儲在內存中。

2.SQL解析: 

      當API接口層接收到調用請求時,會接收到傳入SQL的ID傳入對象(可以是 MapJavaBean或者基本數據類型),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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章