mybatis如何实现继承映射

网友投稿 1119 2022-12-15

mybatis如何实现继承映射

mybatis如何实现继承映射

目录mybatis 继承映射类图三个实体类的代码分析mybatis xml映射文件的继承问题1、首先dao层mapper.java需要继承原来的接口  2、继承原始mapper.xml的结果映射

mybatis 继承映射

ORM框架的优势在于能让我们利用面向对象的思维去操作数据库,hibernate作为重量级的ORM框架对面向对象的支持很强大。作为半自动化的mybatis,对面向对象的支持也是很完备的。这篇文章就来讨论一下如何利用mybatis实现继承映射。

类图

有一个机动车父类,它有两个子类:Car和Bus

关系模型(t_vehicle)

ORM映射有一个原则:对象模型细粒度,关系模型粗粒度。所以我们将所有的车都存储一张表里(t_vehicle),通过鉴别字段vType来区分车的类型("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 {

//车门的数量

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接口【只关注查询】

phttp://ackage 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 {

//根据id查询机动车

Vehicle getVechicleById(String id);

//根据名字查询小汽车

Car getCarByName(String name);

}

xml方式ORM映射

SELECT * FROM TB_VEHICLE WHERE VID = #{id}

SELECT * FROM TB_VEHICLE WHERE VTYPE='c' AND VName = #{id}

分析

其中最为关键的就是标签中的内容,根据鉴别字段的值自动映射成对应的子类

客户端测试代码

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.xml的结果映射

或者是

...

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一篇文章带了解如何用SpringBoot在RequestBody中优雅的使用枚举参数
下一篇:浅谈mybatis返回单一对象或对象列表的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~