resultMap的使用

当查询的表的列名与实体类的属性名不同时,有三种方式来处理:

1、使用SQL的别名 如:select user_name userName from user

2、如果符合驼峰命名,在setting中开启mapUnderscoreToCamelCase

3、设置resultMap,自定义结果集映射规则,不能和resultType同时使用

例:

Type指定映射实体类

<resultMap id="BaseResultMap" type="com.cky.pojo.User" >  

    <id  column="id"  property="id" jdbcType="INTEGER" />  

    <result column="user_name"  property="userName" jdbcType="VARCHAR" />  

    <result column="password"  property="password" jdbcType="VARCHAR" />  

    <result column="age"  property="age" jdbcType="INTEGER" />  

</resultMap>

<select>返回集合

返回List

如果返回的是一个集合,ResultType返回值类型依然要写集合中元素的类型

返回Map

<select>返回一条记录的map,key就是列名,值就是对应的值

一条记录时 设置 resultType=”map”

多条记录时 设置 resultType=”Entity”一条记录的实体类,方法添加@MapKey(“id”)指定哪个属性作为map的key

<select>级联查询1:1

Sql使用多表关联查询,然后指定resultMap 如下:

方法一、

<resultMap id="BaseResultMap" type="com.cky.pojo.User" >  

    <id  column="id"  property="id" jdbcType="INTEGER" />  

    <result column="user_name"  property="userName" jdbcType="VARCHAR" />  

    <result column="password"  property="password" jdbcType="VARCHAR" />  

  <result column="age"  property="age" jdbcType="INTEGER" />  

  <result column=”c_id”  property=”course.id”>

  <result column=”c_name” property=”course.name”>

</resultMap>

方法二、

 <resultMap type="DifResultMap" id="com.cky.pojo.User">

   <id  column="id"  property="id" jdbcType="INTEGER" />  

    <result column="user_name"  property="userName" jdbcType="VARCHAR" />  

    <result column="password"  property="password" jdbcType="VARCHAR" />  

    <result column="age"  property="age" jdbcType="INTEGER" />

    <association property="course" javaType="com.cky.pojo.Course">

     <id column="c_id" property="cId" />

     <result column="c_name" property="cName"/>

    </association>

</resultMap>

方法三、分步查询:使用select指定的方法(传入column指定的这列参数的值)查出对象,并封装给property

<resultMap type="StepResultMap" id="com.cky.pojo.User">

   <id  column="id"  property="id" jdbcType="INTEGER" />  

    <result column="user_name"  property="userName" jdbcType="VARCHAR" />  

    <result column="password"  property="password" jdbcType="VARCHAR" />  

    <result column="age"  property="age" jdbcType="INTEGER" />
  <!-- association中指定某一select的查询结果作为property指定的对象 -->
<association property="course" select="com.cky.dao.getCourse" column="c_id"> </association> </resultMap>

优点,可以使用延迟加载,开启方式:设置setting的

lazyLoadingEnabled true

aggressiveLazyLoading false

显式的配置可以防止版本更新带来的问题

<select>级联查询1:n

方法一、嵌套结果集,sql使用连接查询

<mapper namespace="com.cky.dao.CourseDao">

<resultMap type="com.cky.pojo.Course" id="myCourse">

<id column="c_id" property="cId"/>

<result column="c_name" property="cName"/>

<collection property="students" ofType="com.cky.pojo.Student">

<id column="id" property="id"/>

<result column="user_name" property="userName"/>

<result column="password" property="password"/>

<result column="age" property="age"/>

</collection>

</resultMap>

</mapper>

方法二、分步查询

<mapper namespace="com.cky.dao.CourseDao">

<resultMap type="com.cky.pojo.Course" id="myCourse">

<id column="c_id" property="cId"/>

<result column="c_name" property="cName"/>

<collection perperty=”students”

Select=”com.cky.dao.Student.getStudentByCId”

Column=”c_id”

</collection>

</resultMap>

</mapper>

Mybatis映射配置文件<select>的学习的更多相关文章

  1. 详解mybatis映射配置文件

    一  mybatis 映射文件结构 mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义. cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的 ...

  2. Mybatis基础:Mybatis映射配置文件,Mybatis核心配置文件,Mybatis传统方式开发

    一.Mybatis快速入门 1.1 框架介绍 框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求! 框架:大工具,我们利用工具,可以快速开发项目 (mybatis也是一个 ...

  3. MyBatis映射配置文件详解

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-// ...

  4. 使用generator自动生成Mybatis映射配置文件

    在使用mybatis时,映射文件的配置非常麻烦,对于做逻辑不是很复杂,功能不是特别关键的模块的时候,我们没有必要手动书写,可以使用generator工具生成. generator工具实际上就是根据数据 ...

  5. Mybatis映射配置文件Mapper.xml详解

    1.概述: MyBatis 的真正强大在于它的映射语句,也是它的魔力所在. 2.常用的属性 常用的几个属性: select元素:代表查询,类似的还有update.insert.delete id:这个 ...

  6. mybatis xml配置文件模版

    mybatis xml配置文件模版 1.mybatis核心配置文件书写(SqlMapConfig.xml) <?xml version="1.0" encoding=&quo ...

  7. MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射

    在上一章中我们学习了<MyBatis学习总结(一)——ORM概要与MyBatis快速起步>,这一章主要是介绍MyBatis核心配置文件.使用接口+XML实现完整数据访问.输入参数映射与输出 ...

  8. Mybatis学习--XML映射配置文件

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/configuration.html MyBatis 的配置文件包含了影响 MyBat ...

  9. Java数据持久层框架 MyBatis之API学习三(XML 映射配置文件)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

随机推荐

  1. 【MVC model 验证失效 】【Unexpected token u in JSON at position 0】【jquery-plugin-validation】

    问题描述:mvc model 调用jquery-plugin-validation 实现 前台的数据验证,时报错 Unexpected token u in JSON at position 0 很讨 ...

  2. 【BZOJ4547】Hdu5171 小奇的集合 矩阵乘法

    [BZOJ4547]Hdu5171 小奇的集合 Description 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值.(数据保证这 ...

  3. Spoken English Practice( Nobody have the guts to tell Paul what a mistake he was taking.(call,come,gut,fortune,when it comes to))

    音标复习 绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读 口语蜕变(2017/6/24) If your ...

  4. wire_format.cc:1091] String field 'accountid' contains invalid UTF-8 data when serializing a protocol buffer. Use the 'bytes' type if you intend to send raw bytes.

    原因: 在protobuf 的string字段中存在中文,序列化的时候会出现截断数据,string这个类型带有检查功能 解决方法: 把protobuf中存在中文的string字段类型 改为bytes ...

  5. event chrome firefox 获取点击对象的 id 类

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 原!!mysql,几十万条数据中随机抽取1万以内的数据

    想了几种方法: 1.将所有符合条件的对象集合都查出来,在代码里做随机. 2.先查出所有符合条件的id,再代码随机需要抽查数量的id,再 到数据库 中 in. 3.利用order by rand() l ...

  7. Neutron相关资料链接

    1.OpenStack Neturon 官方文档: https://docs.openstack.org/mitaka/networking-guide/ 2.Neturon理解系列文章: http: ...

  8. CNI插件实现框架---以loopback为示例

    以最简单的loopback插件作为实例,来分析CNI plugin的执行流程 // cni/plugins/loopback/loopback.go 1.func main() main函数只是简单地 ...

  9. SQL竖表转换成横表统计

    #创建表user_score create table user_score ( name varchar(20), subjects varchar(20), score int ); insert ...

  10. python并发编程知识点总结

    1.到底什么是线程?什么是进程? Python自己没有这玩意,Python中调用的操作系统的线程和进程. 2.Python多线程情况下: 计算密集型操作:效率低,Python内置的一个全局解释器锁,锁 ...