Mybatis 支持继承映射,让开发人员能够轻松地进行 SQL 映射。本攻略将详细讲解如何实现 Mybatis 的继承映射,过程中将提供两个示例。
1. 创建父类和子类
首先,我们需要创建一个父类和一个或多个子类。父类是所有子类共有的属性和方法的集合,子类是继承自父类的特定数据模型。
父类 Entity:
public class Entity {
private int id;
private String name;
// getter 和 setter 方法
}
子类 User:
public class User extends Entity {
private String email;
private String password;
// getter 和 setter 方法
}
2. 创建 Mybatis 映射文件
接下来,我们需要创建 Mybatis 映射文件,该文件定义了子类和父类之间的关系以及相应的 SQL 语句。
<mapper namespace="com.example.UserDao">
<resultMap id="entityMap" type="com.example.Entity">
<id property="id" column="id"/>
<result property="name" column="name"/>
</resultMap>
<resultMap id="userMap" type="com.example.User" extends="entityMap">
<result property="email" column="email"/>
<result property="password" column="password"/>
</resultMap>
<select id="getUserById" resultMap="userMap">
SELECT u.*, e.*
FROM user u JOIN entity e ON u.user_id = e.entity_id
WHERE u.user_id = #{id}
</select>
</mapper>
在上面的代码中:
- 父类 Entity 被映射为 resultMap “entityMap”,包括 id 和 name 两个属性
- 子类 User 被映射为 resultMap “userMap”,并继承了 “entityMap” 的映射,还定义了 email 和 password 两个属性
- SQL 语句中使用了 JOIN 操作,将子类 User 与父类 Entity 关联起来,并查询出所有属性
3. 进行数据访问
最后,我们只需要调用 Mybatis 映射文件中定义的方法,即可完成数据访问。
User user = sqlSession.selectOne("com.example.UserDao.getUserById", 1);
从上面的代码可以看出,我们只需要调用 namespace 为 “com.example.UserDao” 且 id 为 “getUserById” 的 select 语句,即可得到 id 为 1 的用户信息,并将其封装为 User 类型。
示例 1
参考:https://www.cnblogs.com/zyw-205520/p/4891546.html
实体类
public class Animal {
private String id;
private String type;
private String name;
private String health;
//setter与getter略
}
public class User extends Animal {
private String sex;
//setter与getter略
}
XML配置文件
<mapper namespace="com.mybatis.dao.UserDao">
<resultMap type="com.mybatis.domain.User" id="userMap">
<result property="id" column="id"/>
<result property="type" column="type"/>
<result property="name" column="name"/>
<result property="health" column="health"/>
<result property="sex" column="sex"/>
</resultMap>
<select id="selectUserById" resultMap="userMap">
SELECT u.*,a.* FROM users u LEFT JOIN animal a ON u.id=a.id where u.id=#{id}
</select>
<select id="selectAnimalById">
SELECT * FROM animal where id=#{id}
</select>
</mapper>
示例 2
参考:https://my.oschina.net/Tobey/blog/893832
实体类
public class Food {
private Integer id;
private String name;
private Integer price;
//getter setter
}
public class Fruit extends Food {
private String color;
//getter setter
}
XML配置文件
<mapper namespace="com.github.tobato.mybatis.FruitMapper">
<resultMap type="com.github.tobato.mybatis.entity.Food" id="foodMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="price" column="price"/>
</resultMap>
<resultMap extends="foodMap" type="com.github.tobato.mybatis.entity.Fruit" id="fruitMap">
<result property="color" column="color"/>
</resultMap>
<select id="selectFruitMapById" resultMap="fruitMap" parameterType="int">
SELECT f.*,a.*
FROM fruits f
LEFT JOIN foods a ON f.id = a.id
WHERE f.id = #{id}
</select>
</mapper>
结论
Mybatis 的继承映射,可以让我们便捷地进行 SQL 映射。只需要简单地定义父类和子类,然后创建对应的 Mybatis 映射文件,即可轻松实现数据映射。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis如何实现继承映射 - Python技术站