Mybatis之@ResultMap,@Results,@Result注解的使用

目录
  • Mybatis注解@Results、@Result、@ResultMap
    • 问题
    • 方法一
    • 方法二
  • mybatis注释使用
    • resultMap对应的注释,及对应注解Results、Result、One、Many的使用
    • 1.@Results注解
    • 2.@Resutl注解
    • 3.@One注解(一对一)
    • 4.@Many注解(多对一)

Mybatis注解@Results、@Result、@ResultMap

问题

在使用mybatis时发现,mybatis能自动匹配实体名和数据库字段名相同的字段。当有实体名与数据库的字段名不同时该如何解决??

数据库的表对应的列名:

springboot项目中建的实体类为:

public class MapModel {
    private Long key;
    private String value;

    //省略getter、setter方法
    }

方法一

给查询字段另起名对应实体类的名称:

@Select("SELECT province_id as key , province_name as value FROM `j_position`")
public List<MapModel> provinceName();

方法二

使用@Results、@Result、@ResultMap注解:

@Select("SELECT province_id, province_name FROM `j_position`")
    @Results(id="resultMap1" ,value = {
            @Result(property = "key",column = "province_id"),
            @Result(property = "value",column ="province_name")
    })
public List<MapModel> provinceName();

其中定义的id="resultMap1"可以使用

@ResultMap("resultMap1)
@Select("SELECT province_id, province_name FROM `j_position` where province_name=#{name}")
public List<MapModel> provinceName(String name);

推荐使用方法二!

mybatis注释使用

resultMap对应的注释,及对应注解Results、Result、One、Many的使用

有一部分建立在我上一个博客,mybatis注释使用(单表查询),如果那里看不懂了,建议看下我上一个博客(里面所有的配置文件,接口,数据库的创建都有说明)

<resultMap>对应的注解:

1.@Results注解

代替的是标签<resultMap >

该注解中可以使用单个@Result注解,也可以使用@Result集合

@Results({@Result(),@Result()})或@Results(@Result())

注意:使用注解是若报出org.apache.ibatis.binding.BindingException:Invalid bound statement (not found):接口全类名.方法名

可能是使用@Results注解时忘记使用@Select注解

2.@Resutl注解

代替了 <id>标签和<result>标签

@Result 中 属性介绍:

  • column 数据库的列名
  • Property需要装配的属性名
  • one 需要使用的@One注解(@Result(one=@One)()))
  • many 需要使用的@Many注解(@Result(many=@many)()))

3.@One注解(一对一)

代替了<assocation>标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。

@One注解属性介绍:

  • select 指定用来多表查询的sqlmapper
  • fetchType会覆盖全局的配置参数lazyLoadingEnabled。。

使用格式:

@Result(column=" ",property="",one=@One(select=""))

4.@Many注解(多对一)

代替了<Collection>标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。

注意:聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList)但是注解中可以不定义;

使用格式:

@Result(property="",column="",many=@Many(select=""))

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 深入理解Mybatis中的resultType和resultMap

     一.概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在. 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值. ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给

  • mybatis的mapper.xml中resultMap标签的使用详解

    1.前言 最近博主在做一个ssm框架的共享汽车管理系统,其中,数据库字段设计的有下划线方式,a_username,然后在写mapper.xml里面的sql语句的时候,一直出现查询语句查询的值为null的情况.或者是resultMap标签和驼峰规则不太明白的同学,可以看这里. 于是顺便梳理一下. 2.关于resultMap 2.1.什么是resultMap? 在mybatis中有一个resultMap标签,它是为了映射select查询出来结果的集合,其主要作用是将实体类中的字段与数据库表中的字段进

  • Mybatis中强大的resultMap功能介绍

    前言 在Mybatis中,有一个强大的功能元素resultMap.当我们希望将JDBC ResultSets中的数据,转化为合理的Java对象时,你就能感受到它的非凡之处.正如其官方所述的那样: resultMap元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作.实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长

  • mybatis简单resultMap使用详解

    Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html mybatis是一个半自动的ORM(Object Relational Mapping)框架,需要手动配置一些SQL语句或者注解,相对来说Mybatis留给程序员操作的空间灵活度更高,通常需要手动配置一些东西完成OR映射.当数据库表中的字段 和 POJO实体类不匹配时,这是就需要程序员手动完成字段的映射. mybatis-config.xml配置文件 <?xml versi

  • Mybatis之@ResultMap,@Results,@Result注解的使用

    目录 Mybatis注解@Results.@Result.@ResultMap 问题 方法一 方法二 mybatis注释使用 resultMap对应的注释,及对应注解Results.Result.One.Many的使用 1.@Results注解 2.@Resutl注解 3.@One注解(一对一) 4.@Many注解(多对一) Mybatis注解@Results.@Result.@ResultMap 问题 在使用mybatis时发现,mybatis能自动匹配实体名和数据库字段名相同的字段.当有实体

  • 详解SpringBoot 快速整合Mybatis(去XML化+注解进阶)

    序言:使用MyBatis3提供的注解可以逐步取代XML,例如使用@Select注解直接编写SQL完成数据查询,使用@SelectProvider高级注解还可以编写动态SQL,以应对复杂的业务需求. 一. 基础注解 MyBatis 主要提供了以下CRUD注解: @Select @Insert @Update @Delete 增删改查占据了绝大部分的业务操作,掌握这些基础注解的使用是很必要的.例如下面这段代码无需XML即可完成数据查询: @Mapper public interface UserMa

  • Java Mybatis使用resultMap时,属性赋值顺序错误的巨坑

    目录 Mybatis使用resultMap属性赋值顺序错误 ids是后加入的字段 resultMap中是这样写的 解决办法 Mybatis使用resultMap时需注意 Mybatis使用resultMap属性赋值顺序错误 今天发现个坑,新建的表使用生成工具生成的mapper文件和实体类后,发现少了个字段就又手动加了下,结果发现一个问题 ids是后加入的字段 @Data @Builder public class QueryRecordPo {        //若干其他属性....     p

  • Mybatis中resultMap的使用总结

    Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中. resultMap包含的元素: <!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性--> <resultMap id="唯一的标识" type="映射的pojo对象&

  • Mybatis中ResultMap解决属性名和数据库字段名不一致问题

    目录 前言 1. 字段名不一致 解决方法: 第一种方式: 起别名 第二种方式: 结果集映射 resultMap 2. 多对一处理 3. 一对多处理 小结 前言 我们Pojo类的属性名和数据库中的字段名不一致的现象时有发生,简单的情况我们可以开启驼峰命名法解决大小写问题,但是遇到其它非大小写问题,我们就不得不使用Mybatis中的结果集映射resultMap. 1. 字段名不一致 数据库中的字段 我们项目中实体类的字段 public class User { private int id; pri

  • Mybatis实现ResultMap结果集

    ResultMap——解决属性名和字段名不一致的问题 数据库中的字段 新建一个项目,拷贝之前的,测试实体类字段不一致的情况 1.新建一个module——mybatis-03 2.新建db.properties配置文件 driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useEncoding=false&characterEncoding=UTF-8&serverTime

  • MyBatis元素resultMap介绍及使用详解

    1.resultMap resultMap 元素是 MyBatis 中最重要最强大的元素. 解决类属性名和数据库中表字段名不一致问题 ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了. 具体效果sql查出来的结果,其中数据库表字段名和类属性名不一致的时候,此属性值为null 解决方式: 方式1:对sql中某个字段在操作的时候起别名,来跟类的属性名一致 方式2:resultMap,将类属性映射到表字段 <!--结果集映射--> <

  • MyBatis Generator去掉生成的注解

    是不是很讨厌mybatis Generator帮我们生成代码的时候在Mapper和mapper.xml文件中生成的一大堆注解?今天在看MyBatis Generator代码的时候发现,原来mybatis generator是提供了配置注解的能力,配置如下,在generatorConfig.xml中加上配置: <commentGenerator> <property name="suppressDate" value="true"/> <

  • mybatis中resultMap 标签的使用教程

    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代码. MyBatis特点: 1.开源的优秀持久层框架 2.SQL语句与代码分离 3.面向配置的编程 4.良好支持复杂数据映射 5.动态SQL resultMap 标签: 用来描述如何从数据库结果集中来加载对象 (敲黑板!!)主管数据库的字段和实体类属性的匹配,

随机推荐