MyBatis 笔记(四)——实体类属性和表字段的映射
来源:互联网 发布:ping的端口号 编辑:程序博客网 时间:2024/05/20 16:33
之前的章节将的实体类属性名和表字段名都是相同的,MyBatis 会自动去映射。那么问题来了,如果实体类属性名和表字段名不相同时,MyBatis 能智能地去映射到吗?答案是:不能。这里用两种解决方案:
1. 在使用 SQL 语句的时候,为每个字段定义别名;
2. 使用 MyBatis 映射文件的 resultMap 标签。
使用别名
使用别名这个很容易理解,因为日常在写 SQL 语句时,通常会用到别名。如:
SELECT Count(*) AS totalFROM order
而这里说的别名和 SQL 语句的别名是一回事,只不过每个字段的别名必须是其对应的实体类属性名。
<select id="selectWithAlias" parameterType="int" resultType="Order"> select order_id id, order_no orderNo, order_price price from orders where order_id = #{id}</select>
可能会有人问,如果我不使用别名会怎么样?如果不使用别名,那么 MyBatis 找不到映射的属性,导致最终的结果返回 null。
使用 resultMap
另一种 MyBatis 的方式是在映射文件中使用 resultMap 标签。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。在 resultMap 中 id 和 result 有几个属性需要了解下:
<select id="selectWithMapping" parameterType="int" resultMap="OrderMapping"> select order_id, order_no, order_price from orders where order_id = #{id}</select><!-- 通过<resultMap>映射实体类属性名和表的字段名对应关系 --><resultMap id="OrderMapping" type="Order"> <!-- id属性来映射主键字段 --> <id column="order_id" property="id" javaType="int"/> <!-- result属性映射非主键字段 --> <result column="order_no" property="orderNo" javaType="String"/> <result column="order_price" property="price"/></resultMap>
完整的映射文件:
<?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="edu.wzm.mybatis.mapping.orderMapper"> <insert id="insert" parameterType="Order"> insert into orders(order_no, order_price) values(#{orderNo}, #{price}) </insert> <!-- 如果表中的字段名和实体类属性名不相同,那么查询出来的结果为 null。 --> <select id="selectWithNothing" parameterType="int" resultType="Order"> select order_id, order_no, order_price from orders where order_id = #{id} </select> <!-- 解决方案一:使用别名, 如果不使用别名,则将返回 null 根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的, 这是因为将查询的字段名都起一个和实体类属性名相同的别名,这样实体类的属性名和查询结果中的字段名就可以一一对应上。 --> <select id="selectWithAlias" parameterType="int" resultType="Order"> select order_id id, order_no orderNo, order_price price from orders where order_id = #{id} </select> <!-- 解决方案二: 根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的, 这是因为通过 <resultMap> 映射实体类属性名和表的字段名一一对应关系 --> <select id="selectWithMapping" parameterType="int" resultMap="OrderMapping"> select order_id, order_no, order_price from orders where order_id = #{id} </select> <!-- 通过<resultMap>映射实体类属性名和表的字段名对应关系 --> <resultMap id="OrderMapping" type="Order"> <!-- id属性来映射主键字段 --> <id column="order_id" property="id" javaType="int"/> <!-- result属性映射非主键字段 --> <result column="order_no" property="orderNo" javaType="String"/> <result column="order_price" property="price"/> </resultMap></mapper>
查看完整代码
阅读全文
0 0
- MyBatis 笔记(四)——实体类属性和表字段的映射
- MyBatis学习笔记(四)表字段名与实体类属性名不相同解决
- mybatis(四)——mybatis解决数据库表字段名与实体类属性名不同的冲突
- MyBatis之实体类属性与表字段不一致的处理
- myBatis学习笔记(3)——实体属性名与表字段名不匹配问题
- MyBatis解决Java实体类和表字段不一致方法
- Mybatis 实体类和表字段不一致解决方案
- Mybatis中实体类属性和数据列之间映射的四种办法
- MyBatis学习笔记:表字段名与实体类属性名不一致的解决方法
- mybatis返回插入的id以及类属性和表字段不一致问题
- 表字段名和实体类属性名不一致的处理
- MyBatis学习笔记四——解决字段名与实体类属性名不相同的冲突
- Java实体类的属性类型与数据库表字段类型对应表
- MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结
- MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结
- MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结
- Mybatis属性和数据库表字段不一致处理
- mybatis数据库表字段名与实体类属性名不同的冲突之resultMap
- 3天完成Neural Networks and Deep learning课程
- Qt程序无法启动,debug时提示During startup program exited with code 0xc0000135
- SQL注入
- 多文件编译1
- hdu3294---Girls' research
- MyBatis 笔记(四)——实体类属性和表字段的映射
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- Linux字符设备驱
- JVM_Java内存模型
- 面向对象的综合应用解析
- 人工神经网络:反向传播算法的数学基础(Part4)
- linux 下怎么设置终端快捷键
- Java中字段、属性、成员变量、局部变量、实例变量、静态变量、类变量、常量
- 字符流中第一个不重复的字符