Mybatis高级结果映射】的更多相关文章

有时侯,我们用SQL取得的结果需要映射到类似Map<key, Bean>这样的数据结构中或是映射到多个实体类中时,我们就需要使用到resultMap.下面用3个例子说明Mybatis高级结果映射的用法. <环境准备> 请参照上一篇blog<Mybatis Guide> <数据准备> 创建班级--学生表的一对多的数据结构 --创建班级表 CREATE TABLE tempdb..test_class ( class_id int NOT NULL PRIMAR…
在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时column='userName' property="userName") 2.Mysql中使用自增主键时,useGeneratedKeys 用来获得自增主键填入类型对应的id属性,之后通过get方法得到 3.Map结尾是映射,Type是类型  resultType 和restltMap re…
高级结果映射 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程序,也将是非常棒的,但也没有.结果集映射就是MyBatis为解决这些问题而提供的解决方案.例如,我们如何映射下面这条语句? <!-- Very Complex Statement --> <select id="selectBlogDetails" parameterTy…
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解MyBatis中如何使用collection标签实现查询结果一对多映射. 1. 使用collection标签 需求:根据用户id查询用户信息的同时获取用户拥有的角色,一个用户可以拥有1个或多个角色. 一般情况下,不建议直接修改数据库表对应的实体类. 所以这里我们延用之前博客中新建的类SysUserExtend,并添加如下代码,如下…
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解MyBatis中实现查询结果一对一映射的3种方式: 使用别名实现自动映射 使用resultMap配置 使用resultMap的association标签配置 1. 使用别名实现自动映射 假设有这样1个需求:根据用户id查询用户信息的同时获取用户拥有的角色,为了举例,我们假设一个用户只能拥有一个角色(实际情况肯定不是这样的). 一般…
-------------------------siwuxie095 MyBatis 高级查询 1.MyBatis 作为一个 ORM 框架,也对 SQL 的高级查询做了支持, MyBatis 高级查询分为如下三种: (1)一对一 (2)一对多 (3)多对多 「MyBatis 高级查询 也被称为 MyBatis 高级结果映射」 2.案例:用户.订单.订单详情.商品的关系 (1)一对一 1)场景:订单和用户的关系 2)描述:相对于订单来说,一个订单只能属于一个用户 PS:实际上,订单和用户的关系是…
前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了头了,我们就也来简单说一些Mybatis的高级映射.当然说到这些东西的时候,最简单也最常用的就是级联查询,所以我们就以几个简单的级联查询为例,分别说一下Mybatis的一对一.一对多.多对多查询. 一.一对一映射 1.需求: 电商类做买卖,用户提交订单后,某宝根据订单信息和客户的姓名.地址派送,现在…
1  订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习.…
mybatis高级映射 一对一关联映射 需求:查询订单信息,关联查询用户信息(一个订单对应一个用户) (1)通过resultType实现 sql语句: select orders.* , USER.username, USER. sex , USER.address FROM orders , USER WHERE orders.userid = USER .id 创建pojo类 由于orders.java不能全部映射字段,所以要新建pojo 创建一个pojo继承包括查询字段较多的·一个po类…
先贴一句官方文档内容 如果世界总是这么简单就好了. 正如官方文档所说:如果一切都是这么简单,那该多好啊,但是实际上,我们面对的是复杂的对象,就是对象里有对象,有列表对象,总之五花八门的对象.这个时候我们期盼这mybatis能帮我们来解决这个问题. 今天,我就遇到了这样的一个问题: 在做基于RBAC权限分配模型中,一共有五张表 sys_permission  记录权限信息,包括权限名称,权限url等 sys_role 记录角色信息,包括角色名和角色id sys_role_permission 记录…
mybatis 高级映射和spring整合之逆向工程(7) 4.0 逆向工程 4.1 mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需的代码(mapper.java,mapper.xml,po..) 企业实际开发中,常用的逆向工程方式: 由数据库的表生成java代码. 4.2 下载逆向工程 mybatis-generator-core-1.3.2-bundle 4.3 使用方法(会用) 4.3.1 运行逆向工程(建议使用jav…
mybatis 高级映射和spring整合之mybatis与Spring整合 3.0 mybatis和spring整合(掌握) 3.1 整合思路 需求spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spring和mybatis整合自动完成) 持久层的mapper都需要有spring进行管理. 3.2 整合环境 创建一个新的java工程(接近实际开发的工程结构) jar…
mybatis 高级映射和spring整合之查询缓存(5) 2.0 查询缓存 2.0.1 什么是查询缓存 mybatis提供缓存,用于减轻数据压力,提高数据库性能. mybatis提供一级缓存和二级缓存. 一级缓存是SqlSession级别的缓存: 在操作数据库时需要购造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据. 不同的sqlSession之间的缓存数据区域(HashMap)是互不影响的. 二级缓存是mapper级别的缓存: 多个sqlSession区操…
mybatis 高级映射和spring整合之高级映射 ----------------学习结构-------------------- 0.0 对订单商品数据模型进行分析 1.0 高级映射 1.1 一对一查询 1.2 一对多查询 1.3 多对多查询 1.4 resultMap总结 1.5 延迟加载 2.0 查询缓存 2.1 一级缓存 2.2 二级缓存(了解mybatis二级缓存使用场景) 3.0 mybatis和spring整合(掌握) 4.0 逆向工程(会用) ----------------…
jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的查询,另外就是在 MyBatis 中使用存储过程的方法,处理存储过程的入参和出参方法,最后会介绍 Java 中的枚举方法和数据库表字段的处理方法. 6.1 高级结果映射 在关系型数据库中,我们经常要处理一对一.一对多的关系. 在 RBAC 权限系统中还存在着一个用户拥有多个角色.一个角色拥有多个权限…
jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.2.4 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的查询,另外就是在 MyBatis 中使用存储过程的方法,处理存储过程的入参和出参方法,最后会介绍 Java 中的枚举方法和数据库表字段的处理方法. 6.1 高级结果映射 在关系型数据库中,我们经常要处理一对一.一对多的关系. 在 RBAC 权限系统中还存在着一个用户拥有多个角色.一个角色拥有多个权限…
全部章节   >>>> 本章目录 3.1 一对一映射 3.1.1 自动化一对一映射 3.1.2 标签配置一对一映射 3.1.3 标签配置一对一映射 3.1.4 实践练习 3.2 一对一映射中的嵌套查询 3.2.1 标签嵌套查询属性 3.2.2 标签嵌套查询实现 3.2.3 实践练习 3.3 一对多映射 3.3.1 标签实现集合映射 3.3.2 标签和标签 3.3.3 实践练习 3.4 一对多映射中的嵌套查询 3.4.1 嵌套查询的层次 3.4.2 标签实现集合的嵌套查询 3.4.3…
简介 文档参考地址:http://www.mybatis.org/mybatis-3/zh/index.html MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码.MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置.…
MyBatis高级篇之整合ehcache缓存框架  2017-09-01  0 Comments  1,671 Views  0 Times 一.前言 MyBatis为我们提供了Cache接口,也提供了一些实现类,进入Cache接口源码,可以看到缓存对于MyBatis来说就是一个Map,比较简陋.但是大家都知道MyBatis是一个专注于持久层框架,与数据库打交道MyBatis是很专业的,但是对于缓存它就略显不足,即便如此MyBatis却提供了Cache接口的标准规范,谁做缓存专业,谁就来实现它,…
SQL映射文件 单条件查询 1. 在UserMapper接口添加抽象方法 //根据用户名模糊查询 List<User> getUserListByName(); 2. 在UserMapper.xml里添加SQL <!--根据用户名模糊查询--> <select id="getUserListByName" resultType="User" parameterType="String"> select * fr…
Mybatis中输出映射resultType与resultMap的区别 (原文地址:http://blog.csdn.net/acmman/article/details/46509375) 一.resultType 使用resultType进行输出映射,只有查询出来的列名和pojo(实体bean)中的属性名一致,该列才可以映射成功. 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象.只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象. 1.输出简单类型…
使用resultMap实现高级结果映射 resultMap的属性: 1.属性 id:resultMap的唯一标识.type:resulMap的映射结果类型(一般为Java实体类).2.子节点 id:一般对应数据库的主键 id,设置此项可以提升数据库性能.result:映射到JavaBean的某个 “ 简单类型 ” 属性,如基础数据类型,包装类等.子节点 id 和 result 均可以实现最基本的结果集映射,将列映射到简单数据类型的属性..这两者唯一不同的是:在比较对象实例时 id 将作为结果集的…
resultMap的属性: 1.属性 id:resultMap的唯一标识.type:resulMap的映射结果类型(一般为Java实体类).2.子节点 id:一般对应数据库的主键 id,设置此项可以提升数据库性能.result:映射到JavaBean的某个 “ 简单类型 ” 属性,如基础数据类型,包装类等.子节点 id 和 result 均可以实现最基本的结果集映射,将列映射到简单数据类型的属性..这两者唯一不同的是:在比较对象实例时 id 将作为结果集的标识属性.这有助于提高总体性能,特别是应…
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上班地铁公交车的时间 ... 不过应该有让大家了解到 Mybatis 的核心配置文件 config.xml 全貌,其中的 元素即是我们本节准备登场介绍的 SQL 映射器,上节有介绍了三种引入 SQL 映射器的方式,本节我们就主要聊聊它的几个顶级元素…
MyBatis 高级查询 之前在学习 Mapper XML 映射文件时,说到 resultMap 标记是 MyBatis 中最重要最强大也是最复杂的标记,而且还提到后面会详细介绍它的高级用法. 听到高级用法不要觉得有多高级,说白了就是联表查询. MyBatis 支持四种联表查询方式: 一对一联表查询 一对多联表查询 多对一联表查询 多对多联表查询 联表查询需要用到 resultMap 标记两个子标记: association 标记:用于映射关联查询单个对象的信息 collection 标记:用于…
Mybatis的输出映射,也就是对查询结果集的一个映射,主要有两种: 1.resultType(不需要配置,可以直接用) 一般是实体类 基本类型也可以 2.resultMap(需要配置resultMap与之对应) 1.resultType返回结果是实体类,这种写法比较简单,直接贴代码,有几个要明白的地方就是: 查询出来的列名和我们的实体类的属性名必须一致,如果不一致,映射不成功. 有一个或者一个以上一致:不一致的显示为null 全部不一致:该对象不被创建 <select id="findA…
ORM 框架的优势在于能让我们利用面向对象的思维去操作数据库, hibernate 作为重量级的 ORM 框架对面向对象的支持很强大.作为半自动化的 mybatis ,对面向对象的支持也是很完备的.这篇文章就来讨论一下如何利用 mybatis 实现继承映射. 类图 有一个机动车父类,它有两个子类: Car 和 Bus 关系模型 (t_vehicle) ORM 映射有一个原则:对象模型细粒度,关系模型粗粒度.所以我们将所有的车都存储一张表里( t_vehicle ),通过鉴别字段 vType 来区…
映射器是MyBatis最强大的工具,也是我们使用MyBatis时用得最多的工具,因此熟练掌握它十分必要.MyBatis是针对映射器构造的SQL构建的轻量级框架,并且通过配置生成对应的JavaBean返回给调用者,而这些配置主要便是映射器,在MyBatis中你可以根据情况定义动态SQL来满足不同场景的需要,它比其他框架灵活得多.MyBatis还支持自动绑定JavaBean,我们只要让SQL返回的字段名和JavaBean的属性名保持一致即可(获赠采用驼峰式命名),便可以省掉这些繁琐的映射配置. 今天…
ORM 框架的优势在于能让我们利用面向对象的思维去操作数据库, hibernate 作为重量级的 ORM 框架对面向对象的支持很强大.作为半自动化的 mybatis ,对面向对象的支持也是很完备的.这篇文章就来讨论一下如何利用 mybatis 实现继承映射. 类图 有一个机动车父类,它有两个子类: Car 和 Bus 关系模型 (t_vehicle) ORM 映射有一个原则:对象模型细粒度,关系模型粗粒度.所以我们将所有的车都存储一张表里( t_vehicle ),通过鉴别字段 vType 来区…
三个实体类,作者.文章和评论. public class Author { private int id; private String username; private String nickname; private LocalDate birthday; private LocalDateTime registerTime; } public class Article { private int id; private String title; private String cont…