1.什么是ORM映射
ORM映射是一种技术,它通过现实ORM规范,完成面向对象的编程语言到关系数据库的映射。它可以把关系型数据库封装成对象,解决面向对象编程语言与底层关系数据库不协调的问题。
具体来说,ORM映射有以下几个基本规则:
- 类与表相对应。
- 类的属性(成员变量)与表的字段相对应。
- 类的实例与表中具体的一条记录相对应。
- 一个类可以对应多个表,一个表也可以对应多个类。
- 数据库中的表可以没有主键,但是类的实例中必须设置主键字段。
- 数据库中表与表之间的关系(如外键)映射成为对象之间的关系。
- 对象中属性(成员变量)的个数和名称可以和表中定义的字段个数和名称不一样。
总的来说,ORM映射是一种技术,它将面向对象的编程语言与关系数据库之间的映射关系进行了定义和实现。
MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时无法自动ORM,如下:
2.列的别名
在 MyBatis 中,你可以使用as关键字为列定义别名。这在你需要为结果集中的列定义自定义名称时非常有用。
以下是一个简单的例子:
在SQL中使用 as 为查询字段添加列别名,以匹配属性名:
public List<Role> findAll();
<select id="findAll" resultType="com.by.pojo.Role" >
select id, role_name as roleName, role_desc as roleDesc from role
</select>
但是此方法在需要查询的很多时都使用别名的话写起来非常麻烦
3.结果映射
结果映射是一种在 MyBatis 中将查询结果映射到 Java 对象的技术。它允许你定义如何将数据库中的记录映射到 Java 对象,以及如何处理不同类型的字段映射。
在 MyBatis 中,结果映射可以通过使用 <resultMap>
元素来定义。<resultMap>
元素包含了一个或多个 <result>
元素,每个 <result>
元素定义了数据库列和 Java 对象属性之间的映射关系。
以下是一个简单的示例,使用ResultMap
标签手动映射,解决实体字段和数据表字段不一致的问题:
public List<Role> findAll2();
<!--
id:和select查询标签的返回值保持一致
type: 映射实体的全类名
-->
<resultMap id="findAll2ResultMap" type="com.by.pojo.Role">
<!--
描述主键字段的映射关系:
property:实体类的属性
column:数据表字段名称
-->
<id property="id" column="id" /><!--
描述非主键字段的映射关系:
property:实体类的属性
column:数据表字段名称
-->
<result property="roleName" column="role_name" />
<result property="roleDesc" column="role_desc" />
</resultMap>
<select id="findAll2" resultMap="findAll2ResultMap" >
select * from role
</select>