最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis如何實現(xiàn)繼承映射

 更新時間:2021年08月25日 10:29:56   作者:溫歡  
這篇文章主要介紹了mybatis如何實現(xiàn)繼承映射的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis 繼承映射

ORM框架的優(yōu)勢在于能讓我們利用面向對象的思維去操作數(shù)據(jù)庫,hibernate作為重量級的ORM框架對面向對象的支持很強大。作為半自動化的mybatis,對面向對象的支持也是很完備的。這篇文章就來討論一下如何利用mybatis實現(xiàn)繼承映射。

類圖

有一個機動車父類,它有兩個子類:Car和Bus

關系模型(t_vehicle)

ORM映射有一個原則:對象模型細粒度,關系模型粗粒度。所以我們將所有的車都存儲一張表里(t_vehicle),通過鑒別字段vType來區(qū)分車的類型("c"代表Car,"b"代表Bus)

三個實體類的代碼

Vehicle

package com.tgb.mybatis.model; 
public class Vehicle {
	//主鍵id
	private String id;
	//車的名字
	private String name;
	
	public String getId() {
		return id;
	}
	
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	} 
}

Car

package com.tgb.mybatis.model; 
public class Car extends Vehicle {
	//車門的數(shù)量
	private int carDoor;
	//車的牌子
	private String band;
	
	public int getCarDoor() {
		return carDoor;
	}
	public void setCarDoor(int carDoor) {
		this.carDoor = carDoor;
	}
	public String getBand() {
		return band;
	}
	public void setBand(String band) {
		this.band = band;
	}	
}

Bus

package com.tgb.mybatis.model; 
public class Bus extends Vehicle {
	//公共汽車的容量
	private int capacity;
 
	public int getCapacity() {
		return capacity;
	} 
	public void setCapacity(int capacity) {
		this.capacity = capacity;
	}	
}

看看對“車”進行操作的Mapper接口【只關注查詢】

package com.tgb.mybatis.data; 
import com.tgb.mybatis.model.Bus;
import com.tgb.mybatis.model.Car;
import com.tgb.mybatis.model.Vehicle; 
public interface VehicleMapper {
	//根據(jù)id查詢機動車
	Vehicle getVechicleById(String id);
	//根據(jù)名字查詢小汽車
	Car getCarByName(String name);
}

xml方式ORM映射

<?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.tgb.mybatis.data.VehicleMapper">
    <select id="getVechicleById" resultMap="vehicleMap">
        SELECT * FROM TB_VEHICLE WHERE VID = #{id}
    </select>
    <select id="getCarByName" resultMap="vehicleMap">
        SELECT * FROM TB_VEHICLE WHERE VTYPE='c' AND VName = #{id}
    </select>
   <resultMap type="vehicle" id="vehicleMap">
       <id property="id" column="vId"/>
       <result property="name" column="vName"/>
       <discriminator javaType="string" column="vType">
           <case value="c" resultType="car">
               <result property="carDoor" column="cardoor"/>
               <result property="band" column="band"/>
           </case>
           <case value="b" resultType="bus">
               <result property="capacity" column="capacity"/>
           </case>
       </discriminator>
   </resultMap>
</mapper>

分析

其中最為關鍵的就是<discriminator>標簽中的內(nèi)容,根據(jù)鑒別字段的值自動映射成對應的子類

客戶端測試代碼

VehicleMapper mapper = session.getMapper(VehicleMapper.class);
Vehicle vehicle = mapper.getVechicleById("1");
System.out.println(vehicle.getName());
Car car = mapper.getCarByName("路虎007");
System.out.println(car.getBand());

很簡單的一個例子,和大家分享一下。

mybatis xml映射文件的繼承問題

1、首先dao層mapper.java需要繼承原來的接口  

原dao層接口

public interface TagMapper {
    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table t_tag
     *
     * @mbg.generated
     */
    long countByExample(TagExample example);
    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table t_tag
     *
     * @mbg.generated
     */
    int deleteByExample(TagExample example);
}

擴展后的dao層接口

public interface TagExtendMapper extends TagMapper {
    ...
}

2、繼承原始mapper.xml的結果映射   

原始mapper.xml的結果映射

<mapper namespace="com.xxx.dao.mapper.TagMapper">
  <resultMap id="BaseResultMap" type="com.xxx.dao.Tag">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <id column="id" jdbcType="CHAR" property="id" />
    <result column="tag_name" jdbcType="VARCHAR" property="tagName" />
    <result column="tag_alias" jdbcType="VARCHAR" property="tagAlias" />
  </resultMap>
</mapper>

擴展mapper.xml的結果映射

<mapper namespace="com.xxx.dao.TagExtendMapper">
    <select id="xxxxx" resultMap="com.xxx.dao.mapper.TagMapper.BaseResultMap"> <!-- 這里時原始命名空間加上結果集id -->
    </select>
</mapper>

或者是

<mapper namespace="com.xxx.dao.TagExtendMapper">
   <resultMap id="ExtBaseResultMap" type="com.xxx.dao.Tag" extend="com.xxx.dao.mapper.TagMapper.BaseResultMap">
       ...
  </resultMap>
</mapper>

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

相關文章

  • Java業(yè)務中臺確保數(shù)據(jù)一致性的解決方案

    Java業(yè)務中臺確保數(shù)據(jù)一致性的解決方案

    數(shù)據(jù)一致性通常指關聯(lián)數(shù)據(jù)之間的邏輯關系是否正確和完整。而數(shù)據(jù)存儲的一致性模型則可以認為是存儲系統(tǒng)和數(shù)據(jù)使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統(tǒng)所承諾的訪問結果
    2021-10-10
  • Java之@TableField注解的用法解析

    Java之@TableField注解的用法解析

    MyBatis-Plus的@TableField注解用于控制實體類字段與數(shù)據(jù)庫表字段的映射關系,支持字段映射、忽略、插入和更新控制、自定義填充策略和類型轉換等
    2025-01-01
  • 常用輸入字節(jié)流InputStream介紹

    常用輸入字節(jié)流InputStream介紹

    下面小編就為大家?guī)硪黄S幂斎胱止?jié)流InputStream介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Mybatis-Plus同時使用邏輯刪除和唯一索引的問題及解決辦法(報數(shù)據(jù)重復Duplicate entry的問題)

    Mybatis-Plus同時使用邏輯刪除和唯一索引的問題及解決辦法(報數(shù)據(jù)重復Duplicate entry的

    在開發(fā)中,我們經(jīng)常會有邏輯刪除和唯一索引同時使用的情況,但當使用mybatis plus時,如果同時使用邏輯刪除和唯一索引,會報數(shù)據(jù)重復Duplicate entry的問題,如何解決這個問題呢,小編給大家分享Mybatis-Plus同時使用邏輯刪除和唯一索引的問題及解決辦法,一起看看吧
    2023-11-11
  • IntelliJ?IDEA?2022.1.1?沒有CVS的過程分析

    IntelliJ?IDEA?2022.1.1?沒有CVS的過程分析

    這篇文章主要介紹了IntelliJ?IDEA?2022.1.1?沒有CVS的過程解析,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • JVM雙親委派模型知識詳細總結

    JVM雙親委派模型知識詳細總結

    今天帶各位小伙伴學習Java虛擬機的相關知識,文中對JVM雙親委派模型作了非常詳細的介紹,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • java實現(xiàn)微信掃碼支付功能

    java實現(xiàn)微信掃碼支付功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)微信掃碼支付功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Mybatis加載策略的實現(xiàn)方法

    Mybatis加載策略的實現(xiàn)方法

    Mybatis中一對一,一對多,多對多關系的配置及實現(xiàn),可以實現(xiàn)對象的關聯(lián)查詢。實際開發(fā)過程中很多時候我們并不需要總是在加載用戶信息時就一定要加載他的訂單信息,這是就是我們常說的延時加載,本文給大家詳細介紹實現(xiàn)方法,一起看看吧
    2022-02-02
  • Java實現(xiàn)遞歸山脈

    Java實現(xiàn)遞歸山脈

    這篇文章主要為大家詳細介紹了Java實現(xiàn)遞歸山脈,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 應用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解

    應用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解

    這篇文章主要介紹了應用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

广西| 依兰县| 泾源县| 郓城县| 昭平县| 吉安县| 社旗县| 肇源县| 永平县| 桃园县| 大同县| 凉城县| 信宜市| 黎城县| 久治县| 公主岭市| 响水县| 固始县| 全州县| 新竹市| 建德市| 平安县| 出国| 高清| 长武县| 吉隆县| 楚雄市| 齐河县| 文成县| 文水县| 津市市| 怀集县| 通渭县| 修武县| 溧阳市| 昌都县| 西宁市| 中牟县| 德阳市| 馆陶县| 扎赉特旗|