Mybatis第一天--Java框架概述+Java的三層結構概述+基於XML以及基於註解的兩種使用方式

什麼是框架?

框架(Frame)可以理解爲是一個Jar包,裏面定義了一些類和接口的集合,供我們在開發中使用,也可以理解爲是某種應用的半成品,使用框架能極大的提高我們在開發中的效率,讓我們能更加專注於編程本身,而不是拘泥於某些細節。

框架存在的意義

框架要解決的最重要的一個問題是技術整合的問題,在 Java和J2EE中,有着各種各樣的技術,不同的開發需求就對應不同的技術要求,這就使得我們開發出來的應用高度依賴於這些技術,這樣一來就會讓技術自身的複雜性和風險性對開發的應用造成衝擊。因此爲了降低應用和技術耦合,於是就有了框架。這樣一來軟件的研發將集中在應用的設計上,而不是具體的技術實現,從而降低技術直接對應用產生影響,框架一般處在低層應用平臺(如 J2EE)和高層業務邏輯之間的中間層。

Java中的三層架構

一個完整的項目可以大致分爲三層架構,分別是表現層(UI)、邏輯層(BLL)以及數據訪問層(DAL),Java對此提出了分層思想,實現軟件工程中的“高內聚、低耦合”。把問題劃分開來各個解決,易於控制,易於延展,易於分配資源。 我們常見的MVC 軟件設計思想就是很好的分層思想。
在這裏插入圖片描述基於這三層架構就出現了許多框架,比如在業務邏輯層上的典型框架有Spring、SpringBoot,常見的Web表現層的框架就有SpringMVC等、還有數據持久層框架Mybatis,也就是我今天學習的內容。

MyBatis

  mybatis 是一個優秀的基於 java 的持久層框架,它內部封裝了 jdbc,讓我們在開發中可以直接使用封裝好的內容,不用再取做加載驅動、創建連接、創建statement的工作。

工作原理

  mybatis 通過 xml 或註解的方式將要執行的各種 statement 配置起來,並通過 java 對象和 statement 中sql 的動態參數進行映射生成最終執行的 sql 語句,最後由 mybatis 框架執行 sql 並將結果映射爲 java 對象並返回。

基於XML使用mybatis完成數據訪問

步驟:

  • 定義sqlMapConfig.xml配置文件,在裏面定義要連接的數據庫的driver、url、username、password。並在裏面配置Mapper映射的對應Dao層接口的xml文件
  • 定義對應dao的xml文件,命名最好和對應Dao層接口的名稱一致。並再裏面定義好名稱空間、id以及ResultType(返回結果類型)
  • 在要調用Dao層方法的地方完成以下步驟
    • 讀取配置文件

       InputStream is=Resources.getResourceAsStream("sqlMapConfig.xml");
      
    • 創建sqlSessionFactory的構建着對象

       SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
      
    • 使用構建者對象創建sqlSessionFactory

        SqlSessionFactory factory =builder.build(is);
      
    • 使用sqlSessionFaxtory創建sqlSession

         SqlSession sqlSession=factory.openSession();
      
    • 使用sqlSession創建dao接口的代理對象

         StudentDao studentDao=sqlSession.getMapper(StudentDao.class);
      
    • 使用代理對象執行dao接口的方法

      List<Student> list = studentDao.findAll();
      
    • 關流

        session.close();
        is.close();
      

sqlMapConfig.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="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test01"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="gzgs/dao/StudentDao.xml"></mapper>
    </mappers>
</configuration>

StudentDao.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="com.gzgs.dao.StudentDao">
    <select id="findAll" resultType="com.gzgs.domain.Student">
        select * from student
    </select>
</mapper>

StudentTest.java

package com.gzgs.test;





import com.gzgs.dao.StudentDao;
import com.gzgs.domain.Student;
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 java.io.InputStream;
import java.util.List;

public class StudentTest {
    public static void main(String[] args)throws Exception {
        //讀取配置文件
        InputStream is=Resources.getResourceAsStream("sqlMapConfig.xml");
        //常見sqlSessionFactory的構建着對象
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();


        //使用構建者對象創建sqlSessionFactory
        SqlSessionFactory factory =builder.build(is);
        //使用sqlSessionFaxtory創建sqlSession
        SqlSession sqlSession=factory.openSession();
        //使用sqlSession創建dao接口的代理對象
        StudentDao studentDao=sqlSession.getMapper(StudentDao.class);
        //使用代理對象執行dao接口的方法
        List<Student> list = studentDao.findAll();
        for (Student student:list){
            System.out.println(student);
        }

    }
}

基於註解的使用方式

步驟:

  • 定義sqlMapConfig.xml配置文件,在裏面定義要連接的數據庫的driver、url、username、password。並在裏面配置Mapper映射的對應Dao層接口的全限定類名

  • 在對應的Dao層接口的方法上添加相應的註解

         @Select("select * from student")
      	 public List<Student> findAll();
    
  • 在要調用Dao層方法的地方完成以下步驟

    • 讀取配置文件

       InputStream is=Resources.getResourceAsStream("sqlMapConfig.xml");
      
    • 創建sqlSessionFactory的構建着對象

       SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
      
    • 使用構建者對象創建sqlSessionFactory

        SqlSessionFactory factory =builder.build(is);
      
    • 使用sqlSessionFaxtory創建sqlSession

         SqlSession sqlSession=factory.openSession();
      
    • 使用sqlSession創建dao接口的代理對象

         StudentDao studentDao=sqlSession.getMapper(StudentDao.class);
      
    • 使用代理對象執行dao接口的方法

      List<Student> list = studentDao.findAll();
      
    • 關流

        session.close();
        is.close();
      

sqlMapConfig.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="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test01"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.gzgs.dao.StudentDao"/>
    </mappers>
</configuration>

StudentDao

package com.gzgs.dao;

import com.gzgs.domain.Student;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 用戶的持久層接口
 */
public interface StudentDao {
    @Select("select * from student")
    public List<Student> findAll();
}

StudentTest.java

package com.gzgs.test;

import com.gzgs.dao.StudentDao;
import com.gzgs.domain.Student;
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 javax.annotation.PreDestroy;
import java.io.InputStream;
import java.util.List;

public class StudentTest {
    public static void main(String[] args)throws Exception{
        //讀取配置文件
        InputStream is= Resources.getResourceAsStream("sqlMapConfig.xml");
        //創建SqlSessionFactoryBulider
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();

        //創建SqlSessionFactory
        SqlSessionFactory factory = builder.build(is);
        //創建SqlSession
        SqlSession session=factory.openSession();
        //實驗SqlSession生成代理對象
        StudentDao dao=session.getMapper(StudentDao.class);
        //使用dao執行方法
        List<Student> all = dao.findAll();
        for(Student student:all){
            System.out.println(student);
        }


        //關流
        session.close();
        is.close();
    }
}

本博客純屬個人學習筆記,學習資源來自黑馬訓練營,如有錯誤,感激指正
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章