首頁 > 軟體

MyBatis框架簡介及入門案例詳解

2022-08-04 14:02:51

前言

傳統的JDBC運算元據庫都是通過寫一個java類,在類中呼叫介面下的API執行相應的SQL,存在大量的寫死。試想,若是開發一個日活度高的系統,那SQL的變動的非常大,就要我們去相應的類中修改Java程式碼,特別是進行查詢操作時需要我們手動將結果集封裝到實體類中,造成後期維護壓力山大

總而言之,缺點多多

MyBatis簡介

mybatis是一個優秀的基於java的持久層框架,它內部封裝了jdbc,使開發者只需要關注sql語句本身,而不需要花費精力去處理載入驅動、建立連線、建立statement等繁雜的過程。mybatis通過xml或註解的方式將要執行的各種statement設定起來,並通過java物件和statement中sql的動態引數進行對映生成最終執行的sql語句

最後mybatis框架執行sql並將結果對映為java物件並返回。採用ORM思想解決了實體和資料庫對映的問題,對jdbc進行了封裝,遮蔽了jdbc api底層存取細節,使我們不用與jdbc api打交道,就可以完成對資料庫的持久化操作

快速入門

下面的組態檔在MyBatis的官網裡都有,自己去複製過來貼上到IDEA中更改對應的資訊即可,我寫出來的目的是為了保證文章的順序流暢(大家莫煩~)

1.匯入MyBatis相關座標

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.10</version>
</dependency>

2.資料庫中建立相應的資料表,並編寫一個表中欄位對應的(Brand)實體類

3.編寫BrandMapper對映檔案

<?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.BrandMapper">
//Mapper代理開發:
//定義與SQL對映檔案同名的Mapper介面,
//並且將Mapper介面和SQL對映檔案放置在同一目錄下
//設定SQL對映檔案的namespace屬性為Mapper介面全限定名
//在Mapper介面中定義方法,方法名就是SQL對映檔案中sql語句的id,並保持引數型別和返回值型別一致
    <select id="selAll" resultType="sqlTest.Brand">
        select * from mybatis;
    </select>
</mapper>

4.編寫封裝查詢結果物件的介面

public interface BrandMapper {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> public List<Brand> selAll(); }

5編寫Mybatis核心組態檔

<?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>
    <typeAliases>
            <package name="sqlTest"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--資料庫連線資訊-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/pyq?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="284650"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/userMapper.xml"/>
        <mapper resource="mapper/BrandMapper.xml"/>
    </mappers>
</configuration>

6.編寫測試類,通過MyBatis實現查詢功能

public class MybatisDemo3 {
    public static void main(String[] args) throws IOException {
        //載入mybatis的核心組態檔,獲取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //獲取sqlSession工廠物件
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //獲取sqlSession物件,來執行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //獲取BrandMapper介面的代理物件
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brands =brandMapper.selAll();
        System.out.println(brands);
        //釋放資源
        sqlSession.close();
    }
}

一頓操作下來好像也沒有簡單多少,其實不然,初次編寫的組態檔都是持久化的屬性,以後的變更只需要在介面裡寫出相應的方法即可,避免了大量的寫死

對映檔案

sql片段與resultMap

在進行查詢操作時,為了解決SQL表中欄位名稱和實體類中的屬性名不一致導致的不能自動封裝(查出為null)的問題,我們可以通過"起別名"也可以通過SQL片段來對查詢的資料進行定義修改,統一重複的操作

比如,在遇到表中的欄位名稱不符合實體類中駝峰命名的規範時、要對查詢的資料進行範圍限定時都可以通過sql片段來實現,就像這樣:

 <sql id="cut">
         bracd_name as bracdName,company_name as compantName
 </sql>
    <select id="selAll" resultType="sqlTest.Brand">
        select <include refid="cut"/> from mybatis;
</select>

通過SQL片段實現了所謂的範圍查詢,單表重複起別名工作的統一,但是針對多次不同的查詢範圍我們需要多次定義SQL片段(不靈活),這也不是一件簡單的事

於是resultMap幫我們解決了這個問題:

    <resultMap id="rm" type="brand">
        <result column="bracd_name" property="bracdName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>
    <select id="selAll" resultMap="rm">
        select * from mybatis;
    </select>

通過id來設定唯一標識,type來指定對映型別,把表的列名column和實體類的屬性名通過result進行對映,在我們的SQL中直接查詢所有即可,進行不同的查詢操作也不需要重複定義片段或者取別名,就變得十分簡單

MyBatis的增刪改查

1.新增操作

編寫Mapper介面,寫出新增的方法:

void add(Brand brand);

設定SQL對映檔案:

<mapper>
    <insert id="add" >
        insert into mybatis(bracd_name,company_name,ordered,description,status)
        values (#{bracdName},#{companyName},#{ordered},#{description},#{status});
    </insert>
</mapper>

執行方法:

 SqlSession sqlSession = sqlSessionFactory.openSession();
  BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
  brandMapper.add(brand);

2.修改操作

編寫Mapper介面,寫出修改的方法:

void update(Brand brand);

編寫對映檔案:

    <update id="update" parameterType="sqlTest.Brand">
        update mybatis set bracd_name=#{bracdName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status}
    </update>

執行方法:

 SqlSession sqlSession = sqlSessionFactory.openSession();
  BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
 int count= brandMapper.update(brand);

3.刪除操作

編寫Mapper介面,寫出刪除方法:

void deleteid(Brand brand);

編寫對映檔案:

    <delete id="deleteid" parameterType="brand">
            delete from mybatis where id=#{id}
    </delete>

執行方法:

 SqlSession sqlSession = sqlSessionFactory.openSession();
  BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
 int count= brandMapper.deleteid(id);

以上就是對MyBtias的初識,後面還有很多高階功能等待整理

到此這篇關於MyBatisPlus框架簡介及入門案例詳解的文章就介紹到這了,更多相關MyBatisPlus案例內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com