文档章节

myBatis-- 字段名与实体类属性名冲突解决办法

求是科技
 求是科技
发布于 2015/10/21 15:19
字数 758
阅读 1910
收藏 2

一、创建订单表

order_id         order_name          order_price

1                        苹果                      6.5

2                        香蕉                        3

3.                       桔子                         2

二、定义实体类

public Order

{

    private Integer id;

    private String name;

    private float price;

}

三、xml文件代码

查不到数据xml如下

<mapper namespace="me.gacl.mapping.orderMapper">
     
     <!--
         根据id查询得到一个order对象,使用这个查询是查询不到我们想要的结果的,
         因为实体类的属性名和数据库的字段名对应不上的原因,因此无法查询出对应的记录
     -->
    <select id="getOrderById" parameterType="int" resultType="me.gacl.domain.Order">
            select * from orders where order_id=#{id}
    </select>        
    
</mapper>

解决方法如下,方法一

直接将 返回的数据库字段名与实体类的属性名 设置成一样,返回类型(resultType)直接设置成接收的实体类名.

<mapper namespace="me.gacl.mapping.orderMapper">
     
     <!--
         根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的,
         这是因为我们将查询的字段名都起一个和实体类属性名相同的别名,这样实体类的属性名和查询结果中的字段名就可以一一对应上
     -->
    <select id="selectOrder" parameterType="int" resultType="me.gacl.domain.Order">
            select order_id id, order_name name,order_price price from orders where order_id=#{id}
    </select>        
    
</mapper>

方法二

注意,这里使用了resultMap转换了一下,所以要将resultType改为resultMap。

<mapper namespace="me.gacl.mapping.orderMapper">
     
     <!--
         根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的,
         因为我们通过<resultMap>映射实体类属性名和表的字段名一一对应关系
     -->
    <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
             select * from orders where order_id=#{id}
    </select>
    
    <!--通过<resultMap>映射实体类属性名和表的字段名对应关系 -->
    <resultMap type="me.gacl.domain.Order" id="orderResultMap">
        <!-- 用id属性来映射主键字段 -->
        <id property="id" column="order_id"/>
        <!-- 用result属性来映射非主键字段 -->
        <result property="name" column="order_name"/>
        <result property="price" column="order_price"/>
    </resultMap>        
</mapper>

总结:

使用MyBatis进行查询操作时无法查询出相应的结果,但是纯sql又能查出数据时,需要考虑下是不是字段对应实体类的属性出现问题,解决方法有如下两点

1>通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。

2>通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。




© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 91
博文 439
码字总数 226317
作品 0
成都
后端工程师
私信 提问
用mybaties 的mapper.xml sql 与 Entity 做一个映射的时候,有些字段不能映射到实体类里面。

   解决办法一: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来...

小熊小熊小
2016/09/29
2
1
MyBatis实体属性与表的字段不对应的解决方案

1、通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上,这种方式是通过在SQL语句中定义别名来解决字段名和属性...

easonjim
2017/10/12
0
0
java高级工程师面试问题集结号(four)

1:mybaties如何实现数据库表名和实体名不一致的情况 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这...

布道牛
2016/09/09
38
0
jingrenlang/mybatis-mapper

#mybatis-mapper Mapper继承CrudMapper后,无需编写mapper.xml文件,即可获得CRUD功能 MyBatis的sql默认加载规则 MyBatis通过xml、SqlProvider两种方式获取sql,xml的优先级高于SqlProvider...

jingrenlang
2015/08/05
0
0
继承 Crud Mapper 的--mybatis-mapper

Mybatis-mapper Mapper 继承 CrudMapper 后,无需编写 mapper.xml 文件,即可获得 CRUD 功能 MyBatis 的 sql 默认加载规则 MyBatis通过xml、SqlProvider两种方式获取sql,xml的优先级高于Sql...

jingrenlang
2015/08/05
2.7K
1

没有更多内容

加载失败,请刷新页面

加载更多

selenium 结合 docker 构建分布式测试环境

随着自动化测试越学越深,深深觉得有太多的东西需要总结。 1.记录下学习中遇到的坑,当做学习笔记。 2.有前人路过看到文章中比较落后的做法,请务必一定要指教。(因为是初学者视角,很多东西...

呐呐丶嘿
8分钟前
0
0
PostgreSQL 安装启动使用一条龙教程——Ubuntu 16.04

今天想尝试下 PostgreSQL,分享一下在 Ubuntu 16.04 下安装启动使用 PostgreSQL 一条龙方法。 添加第三方 apt 仓库: sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/a...

宇润
10分钟前
0
0
对于json文件的读写操作

对json文件的读操作 返回的一个列表,里面是多个字典 def read_json(self,jsonname): with open(r"./{}.json".format(jsonname),"r") as json_f: text_list = json......

鹏灬
12分钟前
0
0
Date-Time API简介

  Date-Time API简介      在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。但使用Date类却有诸多的弊端,如: java.util.Date 是非线程安全的,所有的日期...

SEOwhywhy
12分钟前
1
0
实体类生成对应的建表语句

通过实体类生成对应的建表语句 用java代码根据实体类自动生成对应的建表语句或生成某个包下的所有类的建表语句 根据实体类反射生成SQL java 根据实体对象生成 增删改的SQL语句 ModelToSQL...

miaojiangmin
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部