欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis實(shí)現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式)

 更新時(shí)間:2023年07月13日 14:35:37   作者:寒山月初°C  
這篇文章主要介紹了Mybatis實(shí)現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis實(shí)現(xiàn)SQL映射的兩種方式

SQL映射是Mybatis中最重要,復(fù)雜的組件,它由一個(gè)接口和對(duì)應(yīng)的XML文件(或注解)組成。

它可以配置以下內(nèi)容:

  • 描述映射規(guī)則。
  • 提供 SQL 語(yǔ)句,并可以配置 SQL 參數(shù)類(lèi)型、返回類(lèi)型、緩存刷新等信息。
  • 配置緩存。
  • 提供動(dòng)態(tài) SQL。

在介紹實(shí)現(xiàn)映射的方式之前,先用SQL在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)role表。

CREATE TABLE `role` (
    `id` BIGINT(20) NOT NULL,
    `role_name` VARCHAR(20) DEFAULT NULL,
    `note` VARCHAR(20) DEFAULT NULL,
    PRIMARY KEY (`id`)
)

定義一個(gè)POJO,如下所示:

package com.ljt.mybatis;
public class Role {
    private Long id;
    private String roleName;
    private String note;
}

映射器的主要作用就是將SQL查詢(xún)到的結(jié)果映射為一個(gè)POJO,或者將POJO的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,并定義一些關(guān)于緩存等的重要內(nèi)容。

注意,開(kāi)發(fā)只是一個(gè)接口,而不是一個(gè)實(shí)現(xiàn)類(lèi)。

初學(xué)者可能會(huì)有很大的疑問(wèn),接口不是不能運(yùn)行嗎?

是的,接口確實(shí)不能直接運(yùn)行。Mybatis使用了動(dòng)態(tài)代理技術(shù)使得接口能夠運(yùn)行起來(lái),目前我們只需要知道Mybatis會(huì)為這個(gè)接口生成一個(gè)代理對(duì)象,代理對(duì)象會(huì)去處理相關(guān)的邏輯即可。

一,用XML實(shí)現(xiàn)映射器

用 XML 定義映射器分為兩個(gè)部分:接口和 XML。

先定義一個(gè)映射器接口

package com.ljt.mybatis.mapper;
import com.ljt.mybatis.bean.Role;
public interface RoleMapper {
    public Role getRole(Long id);
}

在XML基礎(chǔ)配置文件中寫(xiě)入這樣一段代碼:

<mapper resource="com/ljt/mybatis/mapper/RoleMapper.xml" />

它的作用就是引入一個(gè) XML 映射文件文件。

用 XML 方式創(chuàng)建映射器,如下所示:

<?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.mybatis.mapper.RoleMapper">
    <select id="getRole" parameterType="long" resultType="role">
        SELECT id,role_name as roleName,note FROM role WHERE id =#{id}
    </select>
</mapper>

這就完成了一個(gè)映射器的定義。

mapper元素中的屬性 namespace 所對(duì)應(yīng)的是一個(gè)接口的全限定名,于是 MyBatis 上下文就可以通過(guò)它找到對(duì)應(yīng)的接口。

select 元素表明這是一條查詢(xún)語(yǔ)句,而屬性 id 標(biāo)識(shí)了這條 SQL所映射的方法名,屬性 parameterType=“long” 說(shuō)明傳遞給 SQL 的是一個(gè) long 型的參數(shù),而 resultType=“role” 表示返回的是一個(gè) role 類(lèi)型的返回值。而 role 是之前配置文件 mybatis-config.xml 配置的類(lèi)的別名,指代的是 com.ljt.mybatis.bean.Role。

這條 SQL 中的 #{id} 表示傳遞進(jìn)去的參數(shù)。

這里采用的是一種被稱(chēng)為自動(dòng)映射的功能,MyBatis 在默認(rèn)情況下提供自動(dòng)映射,只要 SQL 返回的列名能和 POJO 對(duì)應(yīng)起來(lái)即可。

這里 SQL 返回的列名 id 和 note 是可以和之前定義的 POJO 的屬性對(duì)應(yīng)起來(lái)的,而表里的列 role_name 通過(guò) SQL 別名的改寫(xiě),使其成為 roleName,也是和 POJO 對(duì)應(yīng)起來(lái)的,所以此時(shí) MyBatis 就可以把 SQL 查詢(xún)的結(jié)果通過(guò)自動(dòng)映射的功能映射成為一個(gè) POJO。

二,注解實(shí)現(xiàn)映射

除 XML 方式定義映射器外,還可以采用注解方式定義映射器,它只需要一個(gè)接口就可以通過(guò) MyBatis 的注解來(lái)注入 SQL,如下所示。

package com.ljt.mybatis.mapper;
import com.ljt.mybatis.bean.Role;
import org.apache.ibatis.annotations.Select;
public interface RoleMapper {
    @Select("select id,role_name as roleName,note from t_role where id=#{id}")
    public Role getRole(Long id);
}

這完全等同于上面使用XML文件方式創(chuàng)建映射器。

目前好像是使用注解映射會(huì)比XML映射好用的多(畢竟代碼量少很多)。。。

真的是這樣嗎?

我們來(lái)看看以下這條SQL

SELECT ..........
From dbo.PDA_TB_Produce a With(Nolock)
  Join dbo.DctOperationList b With(Nolock)
   On a.Operation_Code=b.Operation_Code
  Join dbo.DctOneStatusList c With(Nolock)
   On a.One_Status_Code=c.One_Status_Code
  Left join dbo.DctTwoStatusList d With(Nolock)
   On c.One_Status_Code=d.One_Status_Code and a.Two_Status_Code=d.Two_Status_Code
  left Join dbo.DctMachineList e With(Nolock)
   On a.Operation_Code=e.Operation_Code and a.Machine_Code=e.Machine_Code
  left Join dbo.DctOperationList f With(Nolock)
   On a.Next_Operation_Code=f.Operation_Code
  Join dbo.DctUserList g With(Nolock)
   On a.User_ID_Operating=g.User_ID
  Join dbo.DctUserList h With(Nolock)
   On a.User_ID=h.User_ID

emmm…

顯然這條 SQL 比較復(fù)雜,如果放入 @Select 中會(huì)明顯增加注解的內(nèi)容。如果把大量的 SQL 放入 代碼中,顯然代碼的可讀性也會(huì)下降。

如果同時(shí)還要考慮使用動(dòng)態(tài) SQL, 還需要加入其他的邏輯,這樣就使得這個(gè)注解更加復(fù)雜了,不利于日后的維護(hù)和修改。

這時(shí)候就會(huì)有老實(shí)人發(fā)問(wèn)了,那么到底是使用注解還是XML呢?

實(shí)際上,注解方式和 XML 方式同時(shí)定義時(shí),XML 方式將覆蓋掉注解方式,所以 MyBatis 官方推薦使用的是 XML 方式。

此外,XML 可以相互引入,而注解是不可以的,所以在一些比較復(fù)雜的場(chǎng)景下,使用 XML 方式會(huì)更加靈活和方便。

所以大部分的企業(yè)都是以 XML 為主,當(dāng)然,在一些簡(jiǎn)單的表和應(yīng)用中使用注解方式也會(huì)比較簡(jiǎn)單。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java從網(wǎng)絡(luò)讀取圖片并保存至本地實(shí)例

    Java從網(wǎng)絡(luò)讀取圖片并保存至本地實(shí)例

    這篇文章主要為大家詳細(xì)介紹了Java從網(wǎng)絡(luò)讀取圖片并保存至本地的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java模擬rank/over函數(shù)實(shí)現(xiàn)獲取分組排名的方法詳解

    Java模擬rank/over函數(shù)實(shí)現(xiàn)獲取分組排名的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java模擬rank()、over()函數(shù)獲取分組排名的方法設(shè)計(jì)及實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • java的依賴(lài)倒置原則你了解多少

    java的依賴(lài)倒置原則你了解多少

    這篇文章主要為大家詳細(xì)介紹了java的依賴(lài)倒置原則,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Java裝飾器設(shè)計(jì)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java裝飾器設(shè)計(jì)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java裝飾器設(shè)計(jì)模式的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Java驗(yàn)證日期時(shí)間字符串是否合法的三種方式

    Java驗(yàn)證日期時(shí)間字符串是否合法的三種方式

    判斷日期經(jīng)常合法出現(xiàn)在IO場(chǎng)景下,下面將盡量使用簡(jiǎn)練的思路和代碼呈現(xiàn)給大伙,這篇文章主要給大家介紹了關(guān)于Java驗(yàn)證日期時(shí)間字符串是否合法的三種方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Spring 日志規(guī)范及作用

    Spring 日志規(guī)范及作用

    日志是在系統(tǒng)運(yùn)行過(guò)程中關(guān)鍵的節(jié)點(diǎn)的數(shù),這個(gè)些日志的記錄方便當(dāng)系統(tǒng)出現(xiàn)問(wèn)題方便問(wèn)題查找,這篇文章主要介紹了Spring 日志規(guī)范及作用,需要的朋友可以參考下
    2024-03-03
  • java利用多線程和Socket實(shí)現(xiàn)猜拳游戲

    java利用多線程和Socket實(shí)現(xiàn)猜拳游戲

    這篇文章主要為大家詳細(xì)介紹了java利用多線程和Socket實(shí)現(xiàn)猜拳游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 手把手帶你實(shí)現(xiàn)第一個(gè)Mybatis程序

    手把手帶你實(shí)現(xiàn)第一個(gè)Mybatis程序

    這篇文章主要介紹了mybatis實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Mybatis中流式查詢(xún)的實(shí)現(xiàn)示例

    Mybatis中流式查詢(xún)的實(shí)現(xiàn)示例

    MyBatis的ResultHandler是用于處理數(shù)據(jù)庫(kù)查詢(xún)結(jié)果集的工具,可以通過(guò)回調(diào)函數(shù)對(duì)數(shù)據(jù)進(jìn)行流式處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • IntelliJ IDEA(2017)安裝和破解的方法

    IntelliJ IDEA(2017)安裝和破解的方法

    這篇文章主要介紹了IntelliJ IDEA(2017)安裝和破解的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11

最新評(píng)論